@enonic/mock-xp
Version:
Mock Enonic XP API JavaScript Library
225 lines (210 loc) • 6.09 kB
text/typescript
import {App} from '../App';
import {Resource} from './Resource';
/*
A controller is a file inside an app.
It can be imported and called under different contexts.
Using libIo.getResource it's possible to dynamically import a controller from
another app, but it's not pretty.
It should be possible to test a controller under two different context, in the
same test file.
Depending upon the path, controllers are typically run in a specific context.
/main.js (com.enonic.cms.default, draft, anonymous & everyone)
/assets (client-side)
/admin/tools (com.enonic.cms.default, draft, logged in user)
/admin/widgets (draft, dashboard: com.enonic.cms.default, contextPanel
and menuIten uses current project, logged in user)
/error (user, not certain about the rest depends on url)
/guillotine (probably depends on url)
/lib (typically imported server-side, context may vary)
/i18n (like /lib)
/import (not available in jar file)
/services (request based, descriptor may require specific principals)
/site/content-types (like /lib)
/site/layouts (request based)
/site/macros (like /lib)
/site/mixins (like /lib)
/site/pages (request based)
/site/parts (request based)
/site/processors (request based)
/site/x-data (like /lib)
/tasks (system-repo, master, role:system.admin)
/types (like /lib)
/webapp (com.enonic.cms.default, draft, user)
Any other path is probably like /lib/*
*/
export class Controller extends Resource {
constructor({
app,
path,
}: {
app: App
path: string
}) {
if (path.startsWith('/assets/')) {
throw new Error('Controller path must NOT start with "/assets/"!');
}
if (path.startsWith('/import/')) {
throw new Error('Controller path must NOT start with "/import/"!');
}
super({
app,
path,
});
}
} // class Controller
/*
http://localhost:8080/site/intro/master/persons/lea-seydoux context: {
"branch": "master",
"repository": "com.enonic.cms.intro",
"authInfo": {
"principals": [
"user:system:anonymous",
"role:system.everyone"
]
},
"attributes": {
"__currentTimeMillis": 1711349074978
}
}
/main context: {
"branch": "draft",
"repository": "com.enonic.cms.default",
"authInfo": {
"principals": [
"user:system:anonymous",
"role:system.everyone"
]
},
"attributes": {}
}
/admin/tool/sample/sample context:{
"branch": "draft",
"repository": "com.enonic.cms.default",
"authInfo": {
"user": {
"type": "user",
"key": "user:system:admin",
"displayName": "admin",
"disabled": false,
"email": "admin@example.com",
"login": "admin",
"idProvider": "system"
},
"principals": [
"role:system.admin",
"role:system.admin.login",
"role:system.authenticated",
"role:system.everyone",
"user:system:admin"
]
},
"attributes": {
"__currentTimeMillis": 1711101006928
}
}
/admin/widgets/contextPanel/contextPanel context:{
"branch": "draft",
"repository": "com.enonic.cms.intro",
"authInfo": {
"user": {
"type": "user",
"key": "user:system:admin",
"displayName": "admin",
"disabled": false,
"email": "admin@example.com",
"login": "admin",
"idProvider": "system"
},
"principals": [
"role:system.admin",
"role:system.admin.login",
"role:system.authenticated",
"role:system.everyone",
"user:system:admin"
]
},
"attributes": {
"__currentTimeMillis": 1711101129498
}
}
/admin/widgets/dashboard/dashboard context:{
"branch": "draft",
"repository": "com.enonic.cms.default",
"authInfo": {
"user": {
"type": "user",
"key": "user:system:su",
"displayName": "Super User",
"disabled": false,
"login": "su",
"idProvider": "system"
},
"principals": [
"role:system.admin",
"role:system.authenticated",
"role:system.everyone",
"user:system:su"
]
},
"attributes": {
"__currentTimeMillis": 1711099799832
}
}
/admin/widgets/menuItem/menuItem context:{
"branch": "draft",
"repository": "com.enonic.cms.intro",
"authInfo": {
"user": {
"type": "user",
"key": "user:system:admin",
"displayName": "admin",
"disabled": false,
"email": "admin@example.com",
"login": "admin",
"idProvider": "system"
},
"principals": [
"role:system.admin",
"role:system.admin.login",
"role:system.authenticated",
"role:system.everyone",
"user:system:admin"
]
},
"attributes": {
"__currentTimeMillis": 1711101066790
}
}
/tasks/task/task context:{
"repository": "system-repo",
"branch": "master",
"principals": [
"role:system.admin"
]
}
/wepapp/webapp context:{
"branch": "draft",
"repository": "com.enonic.cms.default",
"authInfo": {
"user": {
"type": "user",
"key": "user:system:admin",
"displayName": "admin",
"disabled": false,
"email": "admin@example.com",
"login": "admin",
"idProvider": "system"
},
"principals": [
"role:system.admin",
"role:system.admin.login",
"role:system.authenticated",
"role:system.everyone",
"user:system:admin"
]
},
"attributes": {
"__currentTimeMillis": 1711102301910
}
}
*/