2023-11-22 05:16:31 +01:00
import { describe , expect , it } from "bun:test" ;
2024-05-29 02:59:49 +02:00
import { checkIfOauthIsValid } from "@/oauth" ;
2024-11-01 20:57:16 +01:00
import { Application , type ApplicationType } from "@versia/kit/db" ;
2023-11-22 05:16:31 +01:00
describe ( "checkIfOauthIsValid" , ( ) = > {
2024-04-07 07:30:49 +02:00
it ( "should return true when routeScopes and application.scopes are empty" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( { scopes : "" } as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes : string [ ] = [ ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( true ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return true when routeScopes is empty and application.scopes contains write:* or write" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( {
scopes : "write:*" ,
} as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes : string [ ] = [ ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( true ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return true when routeScopes is empty and application.scopes contains read:* or read" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( {
scopes : "read:*" ,
} as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes : string [ ] = [ ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( true ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return true when routeScopes contains only write: permissions and application.scopes contains write:* or write" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( {
scopes : "write:*" ,
} as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes = [ "write:users" , "write:posts" ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( true ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return true when routeScopes contains only read: permissions and application.scopes contains read:* or read" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( {
scopes : "read:*" ,
} as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes = [ "read:users" , "read:posts" ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( true ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return true when routeScopes contains both write: and read: permissions and application.scopes contains write:* or write and read:* or read" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( {
scopes : "write:* read:*" ,
} as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes = [ "write:users" , "read:posts" ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( true ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return false when routeScopes contains write: permissions but application.scopes does not contain write:* or write" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( {
scopes : "read:*" ,
} as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes = [ "write:users" , "write:posts" ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( false ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return false when routeScopes contains read: permissions but application.scopes does not contain read:* or read" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( {
scopes : "write:*" ,
} as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes = [ "read:users" , "read:posts" ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( false ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return false when routeScopes contains both write: and read: permissions but application.scopes does not contain write:* or write and read:* or read" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( { scopes : "" } as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes = [ "write:users" , "read:posts" ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( false ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return true when routeScopes contains a mix of valid and invalid permissions and application.scopes contains all the required permissions" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( {
scopes : "write:* read:*" ,
} as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes = [ "write:users" , "invalid:permission" , "read:posts" ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( true ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return false when routeScopes contains a mix of valid and invalid permissions but application.scopes does not contain all the required permissions" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( {
scopes : "write:*" ,
} as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes = [ "write:users" , "invalid:permission" , "read:posts" ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( false ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return true when routeScopes contains a mix of valid write and read permissions and application.scopes contains all the required permissions" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( {
scopes : "write:* read:posts" ,
} as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes = [ "write:users" , "read:posts" ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( true ) ;
} ) ;
2023-11-22 05:16:31 +01:00
2024-04-07 07:30:49 +02:00
it ( "should return false when routeScopes contains a mix of valid write and read permissions but application.scopes does not contain all the required permissions" , ( ) = > {
2024-10-23 17:56:47 +02:00
const application = new Application ( {
scopes : "write:*" ,
} as ApplicationType ) ;
2024-04-07 07:30:49 +02:00
const routeScopes = [ "write:users" , "read:posts" ] ;
2024-10-23 17:56:47 +02:00
const result = checkIfOauthIsValid ( application , routeScopes ) ;
2024-04-07 07:30:49 +02:00
expect ( result ) . toBe ( false ) ;
} ) ;
2023-11-22 05:16:31 +01:00
} ) ;