mirror of
https://github.com/documize/community.git
synced 2025-08-07 22:45:24 +02:00
Merge pull request #3 from documize/acceptance-tests
Acceptance tests and Ember-Ajax
This commit is contained in:
commit
b04f1ea0f6
59 changed files with 1745 additions and 1212 deletions
423
app/app/mirage/config.js
Normal file
423
app/app/mirage/config.js
Normal file
|
@ -0,0 +1,423 @@
|
|||
export default function() {
|
||||
|
||||
this.passthrough('https://widget.intercom.io/widget/%7Bapp_id%7D');
|
||||
this.urlPrefix = 'https://localhost:5001'; // make this `http://localhost:8080`, for example, if your API is on a different server
|
||||
this.namespace = 'api'; // make this `api`, for example, if your API is namespaced
|
||||
// this.timing = 400; // delay for each request, automatically set to 0 during testing
|
||||
|
||||
this.get('/public/meta', function(db) {
|
||||
return db.meta[0];
|
||||
});
|
||||
|
||||
this.get('/public/validate', function(db, request) {
|
||||
let serverToken = request.queryParams.token;
|
||||
let token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb21haW4iOiIiLCJleHAiOjE0NjQwMjM2NjcsImlzcyI6IkRvY3VtaXplIiwib3JnIjoiVnpNdXlFd18zV3FpYWZjRCIsInN1YiI6IndlYmFwcCIsInVzZXIiOiJWek11eUV3XzNXcWlhZmNFIn0.NXZ6bo8mtvdZF_b9HavbidVUJqhmBA1zr0fSAPvbah0";
|
||||
|
||||
if (token = serverToken) {
|
||||
return {
|
||||
"id": "VzMuyEw_3WqiafcE",
|
||||
"created": "2016-05-11T15:08:24Z",
|
||||
"revised": "2016-05-11T15:08:24Z",
|
||||
"firstname": "Lennex",
|
||||
"lastname": "Zinyando",
|
||||
"email": "brizdigital@gmail.com",
|
||||
"initials": "LZ",
|
||||
"active": true,
|
||||
"editor": true,
|
||||
"admin": true,
|
||||
"accounts": [{
|
||||
"id": "VzMuyEw_3WqiafcF",
|
||||
"created": "2016-05-11T15:08:24Z",
|
||||
"revised": "2016-05-11T15:08:24Z",
|
||||
"admin": true,
|
||||
"editor": true,
|
||||
"userId": "VzMuyEw_3WqiafcE",
|
||||
"orgId": "VzMuyEw_3WqiafcD",
|
||||
"company": "EmberSherpa",
|
||||
"title": "EmberSherpa",
|
||||
"message": "This Documize instance contains all our team documentation",
|
||||
"domain": ""
|
||||
}]
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
this.get('/users/0/permissions', function() {
|
||||
return [{
|
||||
"folderId": "VzMygEw_3WrtFzto",
|
||||
"userId": "",
|
||||
"canView": true,
|
||||
"canEdit": false
|
||||
}];
|
||||
});
|
||||
|
||||
this.get('/templates', function() {
|
||||
return [];
|
||||
});
|
||||
|
||||
this.get('/documents', function(db, request) {
|
||||
let folder_id = request.queryParams.folder;
|
||||
|
||||
if (folder_id = "VzMuyEw_3WqiafcG") {
|
||||
return [{
|
||||
"id": "VzMwX0w_3WrtFztd",
|
||||
"created": "2016-05-11T13:15:11Z",
|
||||
"revised": "2016-05-11T13:22:16Z",
|
||||
"orgId": "VzMuyEw_3WqiafcD",
|
||||
"folderId": "VzMuyEw_3WqiafcG",
|
||||
"userId": "VzMuyEw_3WqiafcE",
|
||||
"job": "",
|
||||
"location": "template-0",
|
||||
"name": "Empty Document",
|
||||
"excerpt": "My test document",
|
||||
"tags": "",
|
||||
"template": false
|
||||
}, {
|
||||
"id": "VzMvJEw_3WqiafcI",
|
||||
"created": "2016-05-11T13:09:56Z",
|
||||
"revised": "2016-05-11T13:09:56Z",
|
||||
"orgId": "VzMuyEw_3WqiafcD",
|
||||
"folderId": "VzMuyEw_3WqiafcG",
|
||||
"userId": "VzMuyEw_3WqiafcE",
|
||||
"job": "0bf9b076-cb74-4e8e-75be-8ee2d24a8171",
|
||||
"location": "/var/folders/d6/kr81d2fs5bsbm8rz2p092fy80000gn/T/documize/_uploads/0bf9b076-cb74-4e8e-75be-8ee2d24a8171/README.md",
|
||||
"name": "README",
|
||||
"excerpt": "To Document/ Instructions. GO. go- bindata- assetsfs. SSL.",
|
||||
"tags": "",
|
||||
"template": false
|
||||
}];
|
||||
} else if (folder_id = "VzMygEw_3WrtFzto") {
|
||||
return {
|
||||
"id": "VzMygEw_3WrtFzto",
|
||||
"created": "2016-05-11T13:24:17Z",
|
||||
"revised": "2016-05-11T13:25:51Z",
|
||||
"name": "Test",
|
||||
"orgId": "VzMuyEw_3WqiafcD",
|
||||
"userId": "VzMuyEw_3WqiafcE",
|
||||
"folderType": 1
|
||||
};
|
||||
} else if (folder_id = 'V0Vy5Uw_3QeDAMW9'){
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
this.get('/folders', function(db) {
|
||||
return db.folders;
|
||||
});
|
||||
|
||||
this.post('/folders', function(db, request) {
|
||||
var name = JSON.parse(request.requestBody).name;
|
||||
let newFolder = {
|
||||
"id":"V0Vy5Uw_3QeDAMW9",
|
||||
"created":"2016-05-25T09:39:49Z",
|
||||
"revised":"2016-05-25T09:39:49Z",
|
||||
"name":name,
|
||||
"orgId":"VzMuyEw_3WqiafcD",
|
||||
"userId":"VzMuyEw_3WqiafcE",
|
||||
"folderType":2
|
||||
};
|
||||
|
||||
let folder = db.folders.insert(newFolder);
|
||||
console.log(newFolder);
|
||||
return folder;
|
||||
});
|
||||
|
||||
this.post('/public/authenticate', () => {
|
||||
return {
|
||||
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkb21haW4iOiIiLCJleHAiOjE0NjQwMjM2NjcsImlzcyI6IkRvY3VtaXplIiwib3JnIjoiVnpNdXlFd18zV3FpYWZjRCIsInN1YiI6IndlYmFwcCIsInVzZXIiOiJWek11eUV3XzNXcWlhZmNFIn0.NXZ6bo8mtvdZF_b9HavbidVUJqhmBA1zr0fSAPvbah0",
|
||||
"user": {
|
||||
"id": "VzMuyEw_3WqiafcE",
|
||||
"created": "2016-05-11T15:08:24Z",
|
||||
"revised": "2016-05-11T15:08:24Z",
|
||||
"firstname": "Lennex",
|
||||
"lastname": "Zinyando",
|
||||
"email": "brizdigital@gmail.com",
|
||||
"initials": "LZ",
|
||||
"active": true,
|
||||
"editor": true,
|
||||
"admin": true,
|
||||
"accounts": [{
|
||||
"id": "VzMuyEw_3WqiafcF",
|
||||
"created": "2016-05-11T15:08:24Z",
|
||||
"revised": "2016-05-11T15:08:24Z",
|
||||
"admin": true,
|
||||
"editor": true,
|
||||
"userId": "VzMuyEw_3WqiafcE",
|
||||
"orgId": "VzMuyEw_3WqiafcD",
|
||||
"company": "EmberSherpa",
|
||||
"title": "EmberSherpa",
|
||||
"message": "This Documize instance contains all our team documentation",
|
||||
"domain": ""
|
||||
}]
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
this.get('/users/VzMuyEw_3WqiafcE/permissions', (db) => {
|
||||
return db.permissions;
|
||||
});
|
||||
|
||||
this.get('/folders/VzMuyEw_3WqiafcG/permissions', () => {
|
||||
return [
|
||||
{
|
||||
"folderId":"VzMuyEw_3WqiafcG",
|
||||
"userId":"VzMuyEw_3WqiafcE",
|
||||
"canView":true,
|
||||
"canEdit":true
|
||||
}
|
||||
];
|
||||
});
|
||||
|
||||
this.put('/folders/VzMygEw_3WrtFzto/permissions', () => {
|
||||
return [
|
||||
{
|
||||
"orgId":"VzMuyEw_3WqiafcD",
|
||||
"folderId":"VzMygEw_3WrtFzto",
|
||||
"userId":"",
|
||||
"canEdit":true,
|
||||
"canView":true
|
||||
},{
|
||||
"orgId":"VzMuyEw_3WqiafcD",
|
||||
"folderId":"VzMygEw_3WrtFzto",
|
||||
"userId":"VzMyp0w_3WrtFztq",
|
||||
"canEdit":false,
|
||||
"canView":false
|
||||
},{
|
||||
"orgId":"",
|
||||
"folderId":"VzMygEw_3WrtFzto",
|
||||
"userId":"VzMuyEw_3WqiafcE",
|
||||
"canEdit":true,
|
||||
"canView":true
|
||||
}
|
||||
];
|
||||
});
|
||||
|
||||
this.get('/folders/VzMygEw_3WrtFzto/permissions', () => {
|
||||
return [
|
||||
{
|
||||
"folderId":"VzMygEw_3WrtFzto",
|
||||
"userId":"VzMuyEw_3WqiafcE",
|
||||
"canView":true,
|
||||
"canEdit":true
|
||||
}
|
||||
];
|
||||
});
|
||||
|
||||
this.put('/folders/:id', (db, request) => {
|
||||
let id = request.params.id;
|
||||
let attrs = JSON.parse(request.requestBody);
|
||||
let folder = db.folders.update(id, attrs);
|
||||
console.log(folder);
|
||||
return folder;
|
||||
});
|
||||
|
||||
this.put('/folders/V0Vy5Uw_3QeDAMW9', () => {
|
||||
return {
|
||||
"id":"V0Vy5Uw_3QeDAMW9",
|
||||
"created":"2016-05-25T09:39:49Z",
|
||||
"revised":"2016-05-25T09:39:49Z",
|
||||
"name":"Test Folder",
|
||||
"orgId":"VzMuyEw_3WqiafcD",
|
||||
"userId":"VzMuyEw_3WqiafcE",
|
||||
"folderType":2
|
||||
};
|
||||
});
|
||||
|
||||
this.get('folders/:id', (db, request) => {
|
||||
let id = request.params.id;
|
||||
return db.folders.find(id);
|
||||
});
|
||||
|
||||
this.get('/organizations/VzMuyEw_3WqiafcD', () => {
|
||||
return {
|
||||
"id": "VzMuyEw_3WqiafcD",
|
||||
"created": "2016-05-11T15:08:24Z",
|
||||
"revised": "2016-05-23T11:23:20Z",
|
||||
"title": "EmberSherpa",
|
||||
"message": "This Documize instance contains all our team documentation",
|
||||
"url": "",
|
||||
"domain": "",
|
||||
"email": "brizdigital@gmail.com",
|
||||
"allowAnonymousAccess": false
|
||||
};
|
||||
});
|
||||
|
||||
this.put('/organizations/VzMuyEw_3WqiafcD', (db, request) => {
|
||||
let title = JSON.parse(request.requestBody).title;
|
||||
let message = JSON.parse(request.requestBody).title;
|
||||
let allowAnonymousAccess = JSON.parse(request.requestBody).allowAnonymousAccess;
|
||||
|
||||
return {
|
||||
"id": "VzMuyEw_3WqiafcD",
|
||||
"created": "2016-05-11T15:08:24Z",
|
||||
"revised": "2016-05-23T11:23:20Z",
|
||||
"title": `${title}`,
|
||||
"message": `${message}`,
|
||||
"url": "",
|
||||
"domain": "",
|
||||
"email": "brizdigital@gmail.com",
|
||||
"allowAnonymousAccess": `${allowAnonymousAccess}`
|
||||
};
|
||||
});
|
||||
|
||||
this.get('/users', () => {
|
||||
return [{
|
||||
"id": "VzMyp0w_3WrtFztq",
|
||||
"created": "2016-05-11T13:24:55Z",
|
||||
"revised": "2016-05-11T13:33:47Z",
|
||||
"firstname": "Len",
|
||||
"lastname": "Random",
|
||||
"email": "zinyando@gmail.com",
|
||||
"initials": "LR",
|
||||
"active": true,
|
||||
"editor": true,
|
||||
"admin": false,
|
||||
"accounts": [{
|
||||
"id": "VzMyp0w_3WrtFztr",
|
||||
"created": "2016-05-11T13:24:55Z",
|
||||
"revised": "2016-05-11T13:24:55Z",
|
||||
"admin": false,
|
||||
"editor": true,
|
||||
"userId": "VzMyp0w_3WrtFztq",
|
||||
"orgId": "VzMuyEw_3WqiafcD",
|
||||
"company": "EmberSherpa",
|
||||
"title": "EmberSherpa",
|
||||
"message": "This Documize instance contains all our team documentation",
|
||||
"domain": ""
|
||||
}]
|
||||
}, {
|
||||
"id": "VzMuyEw_3WqiafcE",
|
||||
"created": "2016-05-11T15:08:24Z",
|
||||
"revised": "2016-05-11T15:08:24Z",
|
||||
"firstname": "Lennex",
|
||||
"lastname": "Zinyando",
|
||||
"email": "brizdigital@gmail.com",
|
||||
"initials": "LZ",
|
||||
"active": true,
|
||||
"editor": true,
|
||||
"admin": true,
|
||||
"accounts": [{
|
||||
"id": "VzMuyEw_3WqiafcF",
|
||||
"created": "2016-05-11T15:08:24Z",
|
||||
"revised": "2016-05-11T15:08:24Z",
|
||||
"admin": true,
|
||||
"editor": true,
|
||||
"userId": "VzMuyEw_3WqiafcE",
|
||||
"orgId": "VzMuyEw_3WqiafcD",
|
||||
"company": "EmberSherpa",
|
||||
"title": "EmberSherpa",
|
||||
"message": "This Documize instance contains all our team documentation",
|
||||
"domain": ""
|
||||
}]
|
||||
}];
|
||||
});
|
||||
|
||||
this.post('/users', (db, request) => {
|
||||
let firstname = JSON.parse(request.requestBody).firstname;
|
||||
let lastname = JSON.parse(request.requestBody).lastname;
|
||||
let email = JSON.parse(request.requestBody).email;
|
||||
|
||||
return {
|
||||
"id":"V0RmtUw_3QeDAMW7",
|
||||
"created":"2016-05-24T14:35:33Z",
|
||||
"revised":"2016-05-24T14:35:33Z",
|
||||
"firstname":`${firstname}`,
|
||||
"lastname":`${lastname}`,
|
||||
"email":`${email}`,
|
||||
"initials":"TU",
|
||||
"active":true,
|
||||
"editor":true,
|
||||
"admin":false,
|
||||
"accounts":[{
|
||||
"id":"V0RmtUw_3QeDAMW8",
|
||||
"created":"2016-05-24T14:35:34Z",
|
||||
"revised":"2016-05-24T14:35:34Z",
|
||||
"admin":false,
|
||||
"editor":true,
|
||||
"userId":"V0RmtUw_3QeDAMW7",
|
||||
"orgId":"VzMuyEw_3WqiafcD",
|
||||
"company":"EmberSherpa",
|
||||
"title":"EmberSherpa",
|
||||
"message":"This Documize instance contains all our team documentation",
|
||||
"domain":""
|
||||
}
|
||||
]};
|
||||
});
|
||||
|
||||
this.get('/users/VzMuyEw_3WqiafcE', () => {
|
||||
|
||||
return {
|
||||
"id":"VzMuyEw_3WqiafcE",
|
||||
"created":"2016-05-11T15:08:24Z",
|
||||
"revised":"2016-05-11T15:08:24Z",
|
||||
"firstname":"Lennex",
|
||||
"lastname":"Zinyando",
|
||||
"email":"brizdigital@gmail.com",
|
||||
"initials":"LZ",
|
||||
"active":true,
|
||||
"editor":true,
|
||||
"admin":true,
|
||||
"accounts":[{
|
||||
"id":"VzMuyEw_3WqiafcF",
|
||||
"created":"2016-05-11T15:08:24Z",
|
||||
"revised":"2016-05-11T15:08:24Z",
|
||||
"admin":true,
|
||||
"editor":true,
|
||||
"userId":"VzMuyEw_3WqiafcE",
|
||||
"orgId":"VzMuyEw_3WqiafcD",
|
||||
"company":"EmberSherpa",
|
||||
"title":"EmberSherpa",
|
||||
"message":"This Documize instance contains all our team documentation",
|
||||
"domain":""
|
||||
}
|
||||
]};
|
||||
});
|
||||
|
||||
this.put('/users/VzMuyEw_3WqiafcE', (db, request) => {
|
||||
let firstname = JSON.parse(request.requestBody).firstname;
|
||||
let lastname = JSON.parse(request.requestBody).lastname;
|
||||
let email = JSON.parse(request.requestBody).email;
|
||||
|
||||
return {
|
||||
"id":"VzMuyEw_3WqiafcE",
|
||||
"created":"2016-05-11T15:08:24Z",
|
||||
"revised":"2016-05-11T15:08:24Z",
|
||||
"firstname":`${firstname}`,
|
||||
"lastname":`${lastname}`,
|
||||
"email":`${email}`,
|
||||
"initials":"LZ",
|
||||
"active":true,
|
||||
"editor":true,
|
||||
"admin":true,
|
||||
"accounts":[{
|
||||
"id":"VzMuyEw_3WqiafcF",
|
||||
"created":"2016-05-11T15:08:24Z",
|
||||
"revised":"2016-05-11T15:08:24Z",
|
||||
"admin":true,
|
||||
"editor":true,
|
||||
"userId":"VzMuyEw_3WqiafcE",
|
||||
"orgId":"VzMuyEw_3WqiafcD",
|
||||
"company":"EmberSherpa",
|
||||
"title":"EmberSherpa",
|
||||
"message":"This Documize instance contains all our team documentation",
|
||||
"domain":""
|
||||
}
|
||||
]};
|
||||
});
|
||||
|
||||
this.post('/folders/VzMuyEw_3WqiafcG/invitation', () => {
|
||||
return {};
|
||||
});
|
||||
|
||||
/**
|
||||
very helpful for debugging
|
||||
*/
|
||||
this.handledRequest = function(verb, path) {
|
||||
console.log(`👊${verb} ${path}`);
|
||||
};
|
||||
|
||||
this.unhandledRequest = function(verb, path) {
|
||||
console.log(`🔥${verb} ${path}`);
|
||||
};
|
||||
|
||||
}
|
20
app/app/mirage/factories/contact.js
Normal file
20
app/app/mirage/factories/contact.js
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
This is an example factory definition.
|
||||
|
||||
Create more files in this directory to define additional factories.
|
||||
*/
|
||||
import Mirage/*, {faker} */ from 'ember-cli-mirage';
|
||||
|
||||
export default Mirage.Factory.extend({
|
||||
// name: 'Pete', // strings
|
||||
// age: 20, // numbers
|
||||
// tall: true, // booleans
|
||||
|
||||
// email: function(i) { // and functions
|
||||
// return 'person' + i + '@test.com';
|
||||
// },
|
||||
|
||||
// firstName: faker.name.firstName, // using faker
|
||||
// lastName: faker.name.firstName,
|
||||
// zipCode: faker.address.zipCode
|
||||
});
|
11
app/app/mirage/factories/folder.js
Normal file
11
app/app/mirage/factories/folder.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
import Mirage, {faker} from 'ember-cli-mirage';
|
||||
|
||||
export default Mirage.Factory.extend({
|
||||
"id": faker.list.cycle('VzMuyEw_3WqiafcG', 'VzMygEw_3WrtFzto'),
|
||||
"created": "2016-05-11T15:08:24Z",
|
||||
"revised": "2016-05-11T15:08:24Z",
|
||||
"name": faker.list.cycle('My Project', 'Test'),
|
||||
"orgId": "VzMuyEw_3WqiafcD",
|
||||
"userId": "VzMuyEw_3WqiafcE",
|
||||
"folderType": faker.list.cycle(1, 2)
|
||||
});
|
10
app/app/mirage/factories/meta.js
Normal file
10
app/app/mirage/factories/meta.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
import Mirage from 'ember-cli-mirage';
|
||||
|
||||
export default Mirage.Factory.extend({
|
||||
"orgId": "VzMuyEw_3WqiafcD",
|
||||
"title": "EmberSherpa",
|
||||
"message": "This Documize instance contains all our team documentation",
|
||||
"url": "",
|
||||
"allowAnonymousAccess": false,
|
||||
"version": "11.2"
|
||||
});
|
8
app/app/mirage/factories/permission.js
Normal file
8
app/app/mirage/factories/permission.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
import Mirage, {faker} from 'ember-cli-mirage';
|
||||
|
||||
export default Mirage.Factory.extend({
|
||||
"folderId": faker.list.cycle('V0Vy5Uw_3QeDAMW9', 'VzMuyEw_3WqiafcG', 'VzMygEw_3WrtFzto', 'VzMygEw_3WrtFzto'),
|
||||
"userId": faker.list.cycle('VzMuyEw_3WqiafcE', 'VzMuyEw_3WqiafcE', 'VzMuyEw_3WqiafcE', ''),
|
||||
"canView":true,
|
||||
"canEdit": faker.list.cycle(true, true, true, false)
|
||||
});
|
7
app/app/mirage/scenarios/default.js
Normal file
7
app/app/mirage/scenarios/default.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
export default function(/* server */) {
|
||||
|
||||
// Seed your development database using your factories. This
|
||||
// data will not be loaded in your tests.
|
||||
|
||||
// server.createList('contact', 10);
|
||||
}
|
|
@ -1,10 +1,15 @@
|
|||
import Ember from 'ember';
|
||||
import config from 'documize/config/environment';
|
||||
|
||||
export default Ember.Route.extend({
|
||||
activate: function(){
|
||||
this.session.logout();
|
||||
this.audit.record("logged-in");
|
||||
this.audit.stop();
|
||||
window.document.location = this.session.appMeta.allowAnonymousAccess ? "/" : "/auth/login";
|
||||
if (config.environment === 'test') {
|
||||
this.transitionTo('auth.login');
|
||||
}else{
|
||||
window.document.location = this.session.appMeta.allowAnonymousAccess ? "/" : "/auth/login";
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -20,23 +20,22 @@ export default Ember.Controller.extend(NotifierMixin, {
|
|||
return;
|
||||
}
|
||||
|
||||
var self = this;
|
||||
$("#newUserFirstname").removeClass("error");
|
||||
$("#newUserLastname").removeClass("error");
|
||||
$("#newUserEmail").removeClass("error");
|
||||
|
||||
this.get('userService').add(this.get('newUser')).then(function(/*user*/) {
|
||||
self.showNotification('Added');
|
||||
self.set('newUser', { firstname: "", lastname: "", email: "", active: true });
|
||||
$("#newUserFirstname").focus();
|
||||
|
||||
self.get('userService').getAll().then(function(users) {
|
||||
self.set('model', users);
|
||||
this.get('userService')
|
||||
.add(this.get('newUser'))
|
||||
.then((user) => {
|
||||
this.showNotification('Added');
|
||||
this.set('newUser', { firstname: "", lastname: "", email: "", active: true });
|
||||
$("#newUserFirstname").focus();
|
||||
this.get('model').pushObject(user);
|
||||
})
|
||||
.catch(function(error){
|
||||
let msg = error.status === 409 ? 'Unable to add duplicate user' : 'Unable to add user';
|
||||
this.showNotification(msg);
|
||||
});
|
||||
}, function(error) {
|
||||
let msg = error.status === 409 ? 'Unable to add duplicate user' : 'Unable to add user';
|
||||
self.showNotification(msg);
|
||||
});
|
||||
},
|
||||
|
||||
onDelete(user) {
|
||||
|
|
|
@ -3,6 +3,9 @@ import NotifierMixin from "../../mixins/notifier";
|
|||
import Encoding from "../../utils/encoding";
|
||||
|
||||
export default Ember.Controller.extend(NotifierMixin, {
|
||||
|
||||
ajax: Ember.inject.service(),
|
||||
|
||||
actions: {
|
||||
save() {
|
||||
if (is.empty(this.model.title)) {
|
||||
|
@ -37,22 +40,17 @@ export default Ember.Controller.extend(NotifierMixin, {
|
|||
|
||||
this.model.allowAnonymousAccess = Ember.$("#allowAnonymousAccess").prop('checked');
|
||||
|
||||
let self = this;
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: "/setup",
|
||||
data: self.model,
|
||||
this.get('ajax').request("/setup", {
|
||||
method: 'POST',
|
||||
data: this.model,
|
||||
dataType: "text",
|
||||
success: function() {
|
||||
var credentials = Encoding.Base64.encode(":" + self.model.email + ":" + self.model.password);
|
||||
window.location.href = "/auth/sso/" + encodeURIComponent(credentials);
|
||||
},
|
||||
error: function(x) {
|
||||
// TODO notify user of the error within the GUI
|
||||
console.log("Something went wrong attempting database creation, see server log: " + x);
|
||||
}
|
||||
}).then(() => {
|
||||
var credentials = Encoding.Base64.encode(":" + this.model.email + ":" + this.model.password);
|
||||
window.location.href = "/auth/sso/" + encodeURIComponent(credentials);
|
||||
}).catch((error) => {
|
||||
// TODO notify user of the error within the GUI
|
||||
console.log("Something went wrong attempting database creation, see server log: " + error);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||
//
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
//
|
||||
// You can operate outside the AGPL restrictions by purchasing
|
||||
// Documize Enterprise Edition and obtaining a commercial license
|
||||
// by contacting <sales@documize.com>.
|
||||
// by contacting <sales@documize.com>.
|
||||
//
|
||||
// https://documize.com
|
||||
|
||||
|
@ -99,4 +99,4 @@ export default Router.map(function() {
|
|||
});
|
||||
|
||||
this.route('pods', function() {});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -23,7 +23,7 @@ export default Ember.Route.extend({
|
|||
// Session ready?
|
||||
return session.boot().then(function() {
|
||||
// Need to authenticate?
|
||||
if (!session.appMeta.allowAnonymousAccess && !session.authenticated &&
|
||||
if (!session.get("appMeta.allowAnonymousAccess") && !session.get("authenticated") &&
|
||||
is.not.startWith(transition.targetName, 'auth.')) {
|
||||
if (!self.transitioning) {
|
||||
session.set('previousTransition', transition);
|
||||
|
@ -52,4 +52,4 @@ export default Ember.Route.extend({
|
|||
return true;
|
||||
}
|
||||
},
|
||||
});
|
||||
});
|
||||
|
|
|
@ -16,7 +16,7 @@ import config from '../config/environment';
|
|||
export default Ember.Service.extend({
|
||||
sessionService: Ember.inject.service('session'),
|
||||
ready: false,
|
||||
enabled: true,
|
||||
enabled: config.APP.auditEnabled,
|
||||
|
||||
init() {
|
||||
this.start();
|
||||
|
|
|
@ -19,15 +19,15 @@ export default Ember.Service.extend({
|
|||
},
|
||||
|
||||
setTitle(title) {
|
||||
document.title = title + " | " + this.get('sessionService').appMeta.title;
|
||||
document.title = title + " | " + this.get('sessionService.appMeta.title');
|
||||
},
|
||||
|
||||
setTitleReverse(title) {
|
||||
document.title = this.get('sessionService').appMeta.title + " | " + title;
|
||||
document.title = this.get('sessionService.appMeta.title') + " | " + title;
|
||||
},
|
||||
|
||||
setTitleAsPhrase(title) {
|
||||
document.title = this.get('sessionService').appMeta.title + " " + title;
|
||||
document.title = this.get('sessionService.appMeta.title') + " " + title;
|
||||
},
|
||||
|
||||
setTitleWithoutSuffix(title) {
|
||||
|
@ -38,7 +38,7 @@ export default Ember.Service.extend({
|
|||
$('meta[name=description]').remove();
|
||||
|
||||
if (is.null(description) || is.undefined(description)) {
|
||||
description = this.get('sessionService').appMeta.message;
|
||||
description = this.get('sessionService.appMeta.message');
|
||||
}
|
||||
|
||||
$('head').append('<meta name="description" content="' + description + '">');
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||
//
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
//
|
||||
// You can operate outside the AGPL restrictions by purchasing
|
||||
// Documize Enterprise Edition and obtaining a commercial license
|
||||
// by contacting <sales@documize.com>.
|
||||
// by contacting <sales@documize.com>.
|
||||
//
|
||||
// https://documize.com
|
||||
|
||||
|
@ -14,50 +14,37 @@ import models from '../utils/model';
|
|||
|
||||
export default Ember.Service.extend({
|
||||
sessionService: Ember.inject.service('session'),
|
||||
ajax: Ember.inject.service(),
|
||||
|
||||
// Returns document model for specified document id.
|
||||
getDocument(documentId) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let doc = models.DocumentModel.create(response);
|
||||
resolve(doc);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: "GET"
|
||||
}).then((response) => {
|
||||
return models.DocumentModel.create(response);
|
||||
});
|
||||
},
|
||||
|
||||
// Returns all documents for specified folder.
|
||||
getAllByFolder(folderId) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`documents?folder=${folderId}`);
|
||||
let appMeta = this.get('sessionService.appMeta');
|
||||
let url = appMeta.getUrl(`documents?folder=${folderId}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let documents = Ember.ArrayProxy.create({
|
||||
content: Ember.A([])
|
||||
});
|
||||
|
||||
_.each(response, function(doc) {
|
||||
let documentModel = models.DocumentModel.create(doc);
|
||||
documents.pushObject(documentModel);
|
||||
});
|
||||
|
||||
resolve(documents);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
return this.get('ajax').request(url, {
|
||||
method: "GET"
|
||||
}).then((response) => {
|
||||
let documents = Ember.ArrayProxy.create({
|
||||
content: Ember.A([])
|
||||
});
|
||||
|
||||
_.each(response, function(doc) {
|
||||
let documentModel = models.DocumentModel.create(doc);
|
||||
documents.pushObject(documentModel);
|
||||
});
|
||||
|
||||
return documents;
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -65,26 +52,19 @@ export default Ember.Service.extend({
|
|||
getAllByTag(tag) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`documents?filter=tag&tag=${tag}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let documents = Ember.ArrayProxy.create({
|
||||
content: Ember.A([])
|
||||
});
|
||||
|
||||
_.each(response, function(doc) {
|
||||
let documentModel = models.DocumentModel.create(doc);
|
||||
documents.pushObject(documentModel);
|
||||
});
|
||||
|
||||
resolve(documents);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
return this.get('ajax').request(url, {
|
||||
method: "GET"
|
||||
}).then((response) => {
|
||||
let documents = Ember.ArrayProxy.create({
|
||||
content: Ember.A([])
|
||||
});
|
||||
|
||||
_.each(response, function(doc) {
|
||||
let documentModel = models.DocumentModel.create(doc);
|
||||
documents.pushObject(documentModel);
|
||||
});
|
||||
|
||||
return documents;
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -93,371 +73,209 @@ export default Ember.Service.extend({
|
|||
let id = doc.get('id');
|
||||
let url = this.get('sessionService').appMeta.getUrl(`documents/${id}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'PUT',
|
||||
data: JSON.stringify(doc),
|
||||
contentType: 'json',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'PUT',
|
||||
data: JSON.stringify(doc)
|
||||
});
|
||||
},
|
||||
|
||||
getBatchedPages: function(documentId, payload) {
|
||||
var self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/batch");
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/batch"),
|
||||
type: 'POST',
|
||||
data: payload,
|
||||
success: function(pages) {
|
||||
if (is.not.array(pages)) {
|
||||
pages = [];
|
||||
}
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'POST',
|
||||
data: payload
|
||||
}).then((pages) => {
|
||||
if (is.not.array(pages)) {
|
||||
pages = [];
|
||||
}
|
||||
|
||||
resolve(pages);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return pages;
|
||||
});
|
||||
},
|
||||
|
||||
changePageSequence: function(documentId, payload) {
|
||||
var self = this;
|
||||
var url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/sequence");
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/sequence"),
|
||||
type: 'POST',
|
||||
data: JSON.stringify(payload),
|
||||
contentType: 'json',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url, {
|
||||
data: JSON.stringify(payload),
|
||||
contentType: 'json'
|
||||
});
|
||||
},
|
||||
|
||||
changePageLevel(documentId, payload) {
|
||||
var self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/level");
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/level"),
|
||||
type: 'POST',
|
||||
data: JSON.stringify(payload),
|
||||
contentType: 'json',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url, {
|
||||
data: JSON.stringify(payload),
|
||||
contentType: 'json'
|
||||
});
|
||||
},
|
||||
|
||||
deleteDocument: function(documentId) {
|
||||
var self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId),
|
||||
type: 'DELETE',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'DELETE'
|
||||
});
|
||||
},
|
||||
|
||||
updatePage: function(documentId, pageId, payload, skipRevision) {
|
||||
var self = this;
|
||||
var revision = skipRevision ? "?r=true" : "?r=false";
|
||||
let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + revision);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + revision),
|
||||
type: 'PUT',
|
||||
data: JSON.stringify(payload),
|
||||
contentType: 'json',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'PUT',
|
||||
data: JSON.stringify(payload),
|
||||
contentType: 'json'
|
||||
});
|
||||
},
|
||||
|
||||
// addPage inserts new page to an existing document.
|
||||
addPage: function(documentId, payload) {
|
||||
var self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages");
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages"),
|
||||
type: 'POST',
|
||||
data: JSON.stringify(payload),
|
||||
contentType: 'json',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url, {
|
||||
data: JSON.stringify(payload),
|
||||
contentType: 'json'
|
||||
});
|
||||
},
|
||||
|
||||
// Nukes multiple pages from the document.
|
||||
deletePages: function(documentId, pageId, payload) {
|
||||
var self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId),
|
||||
type: 'POST',
|
||||
data: JSON.stringify(payload),
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url, {
|
||||
data: JSON.stringify(payload),
|
||||
contentType: 'json'
|
||||
});
|
||||
},
|
||||
|
||||
// Nukes a single page from the document.
|
||||
deletePage: function(documentId, pageId) {
|
||||
var self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId),
|
||||
type: 'DELETE',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'DELETE'
|
||||
});
|
||||
},
|
||||
|
||||
getPageRevisions(documentId, pageId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions");
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions"),
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: "GET"
|
||||
});
|
||||
},
|
||||
|
||||
getPageRevisionDiff(documentId, pageId, revisionId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions/" + revisionId);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions/" + revisionId),
|
||||
type: 'GET',
|
||||
dataType: 'text',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: "GET",
|
||||
dataType: 'text'
|
||||
});
|
||||
},
|
||||
|
||||
rollbackPage(documentId, pageId, revisionId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions/" + revisionId);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("documents/" + documentId + "/pages/" + pageId + "/revisions/" + revisionId),
|
||||
type: 'POST',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: "POST"
|
||||
});
|
||||
},
|
||||
|
||||
// document meta referes to number of views, edits, approvals, etc.
|
||||
getMeta(documentId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/meta`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/meta`),
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: "GET"
|
||||
});
|
||||
},
|
||||
|
||||
// Returns all pages without the content
|
||||
getTableOfContents(documentId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages?content=0`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages?content=0`),
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.PageModel.create(obj));
|
||||
});
|
||||
resolve(data);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'GET'
|
||||
}).then((response) => {
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.PageModel.create(obj));
|
||||
});
|
||||
|
||||
return data;
|
||||
});
|
||||
},
|
||||
|
||||
// Returns all document pages with content
|
||||
getPages(documentId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages`),
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let pages = [];
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'GET'
|
||||
}).then((response) => {
|
||||
let pages = [];
|
||||
|
||||
_.each(response, function(page) {
|
||||
pages.pushObject(models.PageModel.create(page));
|
||||
});
|
||||
|
||||
if (pages.length > 0) {
|
||||
Ember.set(pages[0], 'firstPage', true);
|
||||
}
|
||||
|
||||
resolve(pages);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
_.each(response, function(page) {
|
||||
pages.pushObject(models.PageModel.create(page));
|
||||
});
|
||||
|
||||
if (pages.length > 0) {
|
||||
Ember.set(pages[0], 'firstPage', true);
|
||||
}
|
||||
|
||||
return pages;
|
||||
});
|
||||
},
|
||||
|
||||
// Returns document page with content
|
||||
getPage(documentId, pageId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages/${pageId}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages/${pageId}`),
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let page = models.PageModel.create(response);
|
||||
resolve(page);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'GET'
|
||||
}).then((response) => {
|
||||
let page = models.PageModel.create(response);
|
||||
return page;
|
||||
});
|
||||
},
|
||||
|
||||
// Returns document page meta object
|
||||
getPageMeta(documentId, pageId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages/${pageId}/meta`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/pages/${pageId}/meta`),
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let meta = models.PageMetaModel.create(response);
|
||||
resolve(meta);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'GET'
|
||||
}).then((response) => {
|
||||
let meta = models.PageMetaModel.create(response);
|
||||
return meta;
|
||||
});
|
||||
},
|
||||
|
||||
// document attachments without the actual content
|
||||
getAttachments(documentId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/attachments`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/attachments`),
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.AttachmentModel.create(obj));
|
||||
});
|
||||
resolve(data);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'GET'
|
||||
}).then((response) => {
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.AttachmentModel.create(obj));
|
||||
});
|
||||
return data;
|
||||
});
|
||||
},
|
||||
|
||||
// nuke an attachment
|
||||
deleteAttachment(documentId, attachmentId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl(`documents/${documentId}/attachments/${attachmentId}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl(`documents/${documentId}/attachments/${attachmentId}`),
|
||||
type: 'DELETE',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'DELETE'
|
||||
});
|
||||
},
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||
//
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
//
|
||||
// You can operate outside the AGPL restrictions by purchasing
|
||||
// Documize Enterprise Edition and obtaining a commercial license
|
||||
// by contacting <sales@documize.com>.
|
||||
// by contacting <sales@documize.com>.
|
||||
//
|
||||
// https://documize.com
|
||||
|
||||
|
@ -15,6 +15,7 @@ import BaseService from '../services/base';
|
|||
|
||||
export default BaseService.extend({
|
||||
sessionService: Ember.inject.service('session'),
|
||||
ajax: Ember.inject.service(),
|
||||
|
||||
// selected folder
|
||||
currentFolder: null,
|
||||
|
@ -22,41 +23,28 @@ export default BaseService.extend({
|
|||
|
||||
// Add a new folder.
|
||||
add(folder) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`folders`);
|
||||
let appMeta = this.get('sessionService.appMeta');
|
||||
let url = appMeta.getUrl(`folders`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'POST',
|
||||
data: JSON.stringify(folder),
|
||||
contentType: 'json',
|
||||
success: function(folder) {
|
||||
let folderModel = models.FolderModel.create(folder);
|
||||
resolve(folderModel);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url, {
|
||||
contentType: 'json',
|
||||
data: JSON.stringify(folder)
|
||||
}).then((folder)=>{
|
||||
let folderModel = models.FolderModel.create(folder);
|
||||
return folderModel;
|
||||
});
|
||||
},
|
||||
|
||||
// Returns folder model for specified folder id.
|
||||
getFolder(id) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`folders/${id}`);
|
||||
let appMeta = this.get('sessionService.appMeta');
|
||||
let url = appMeta.getUrl(`folders/${id}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let folder = models.FolderModel.create(response);
|
||||
resolve(folder);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'GET'
|
||||
}).then((response)=>{
|
||||
let folder = models.FolderModel.create(response);
|
||||
return folder;
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -78,57 +66,27 @@ export default BaseService.extend({
|
|||
let id = folder.get('id');
|
||||
let url = this.get('sessionService').appMeta.getUrl(`folders/${id}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'PUT',
|
||||
data: JSON.stringify(folder),
|
||||
contentType: 'json',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'PUT',
|
||||
contentType: 'json',
|
||||
data: JSON.stringify(folder)
|
||||
});
|
||||
},
|
||||
|
||||
remove: function(folderId, moveToId) {
|
||||
var self = this;
|
||||
var url = self.get('sessionService').appMeta.getUrl('folders/' + folderId + "/move/" + moveToId);
|
||||
var url = this.get('sessionService').appMeta.getUrl('folders/' + folderId + "/move/" + moveToId);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'DELETE',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'DELETE'
|
||||
});
|
||||
},
|
||||
|
||||
onboard: function(folderId, payload) {
|
||||
var self = this;
|
||||
var url = self.get('sessionService').appMeta.getUrl('public/share/' + folderId);
|
||||
var url = this.get('sessionService').appMeta.getUrl('public/share/' + folderId);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: "POST",
|
||||
data: payload,
|
||||
contentType: "application/json",
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url, {
|
||||
contentType: "application/json",
|
||||
data: payload
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -136,106 +94,69 @@ export default BaseService.extend({
|
|||
getProtectedFolderInfo: function() {
|
||||
var url = this.get('sessionService').appMeta.getUrl('folders?filter=viewers');
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.ProtectedFolderParticipant.create(obj));
|
||||
});
|
||||
|
||||
resolve(data);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
return this.get('ajax').request(url, {
|
||||
method: "GET"
|
||||
}).then((response)=>{
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.ProtectedFolderParticipant.create(obj));
|
||||
});
|
||||
|
||||
return data;
|
||||
});
|
||||
},
|
||||
|
||||
// reloads and caches folders.
|
||||
reload() {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`folders`);
|
||||
let appMeta = this.get('sessionService.appMeta');
|
||||
let url = appMeta.getUrl(`folders`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.FolderModel.create(obj));
|
||||
});
|
||||
resolve(data);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
return this.get('ajax').request(url, {
|
||||
method: "GET"
|
||||
}).then((response)=>{
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.FolderModel.create(obj));
|
||||
});
|
||||
|
||||
return data;
|
||||
});
|
||||
},
|
||||
|
||||
// so who can see/edit this folder?
|
||||
getPermissions(folderId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl(`folders/${folderId}/permissions`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl(`folders/${folderId}/permissions`),
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.FolderPermissionModel.create(obj));
|
||||
});
|
||||
resolve(data);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
return this.get('ajax').request(url, {
|
||||
method: "GET"
|
||||
}).then((response)=>{
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.FolderPermissionModel.create(obj));
|
||||
});
|
||||
|
||||
return data;
|
||||
});
|
||||
},
|
||||
|
||||
// persist folder permissions
|
||||
savePermissions(folderId, payload) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl(`folders/${folderId}/permissions`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl(`folders/${folderId}/permissions`),
|
||||
type: 'PUT',
|
||||
contentType: 'json',
|
||||
data: JSON.stringify(payload),
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'PUT',
|
||||
contentType: 'json',
|
||||
data: JSON.stringify(payload)
|
||||
});
|
||||
},
|
||||
|
||||
// share this folder with new users!
|
||||
share(folderId, invitation) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl(`folders/${folderId}/invitation`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl(`folders/${folderId}/invitation`),
|
||||
type: 'POST',
|
||||
contentType: 'json',
|
||||
data: JSON.stringify(invitation),
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url, {
|
||||
contentType: 'json',
|
||||
data: JSON.stringify(invitation)
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -255,42 +176,38 @@ export default BaseService.extend({
|
|||
}
|
||||
|
||||
let url = this.get('sessionService').appMeta.getUrl('users/' + userId + "/permissions");
|
||||
let self = this;
|
||||
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(folderPermissions) {
|
||||
// safety check
|
||||
self.set('canEditCurrentFolder', false);
|
||||
return this.get('ajax').request(url).then((folderPermissions) => {
|
||||
// safety check
|
||||
this.set('canEditCurrentFolder', false);
|
||||
|
||||
if (folderPermissions.length === 0) {
|
||||
return;
|
||||
if (folderPermissions.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
let result = [];
|
||||
let folderId = folder.get('id');
|
||||
|
||||
folderPermissions.forEach(function(item) {
|
||||
if (item.folderId === folderId) {
|
||||
result.push(item);
|
||||
}
|
||||
});
|
||||
|
||||
let canEdit = false;
|
||||
|
||||
result.forEach(function(permission) {
|
||||
if (permission.userId === userId) {
|
||||
canEdit = permission.canEdit;
|
||||
}
|
||||
|
||||
let result = [];
|
||||
let folderId = folder.get('id');
|
||||
|
||||
folderPermissions.forEach(function(item) {
|
||||
if (item.folderId === folderId) {
|
||||
result.push(item);
|
||||
}
|
||||
});
|
||||
|
||||
let canEdit = false;
|
||||
|
||||
result.forEach(function(permission) {
|
||||
if (permission.userId === userId) {
|
||||
canEdit = permission.canEdit;
|
||||
}
|
||||
|
||||
if (permission.userId === "" && !canEdit) {
|
||||
canEdit = permission.canEdit;
|
||||
}
|
||||
});
|
||||
|
||||
self.set('canEditCurrentFolder', canEdit && self.get('sessionService').authenticated);
|
||||
}
|
||||
if (permission.userId === "" && !canEdit) {
|
||||
canEdit = permission.canEdit;
|
||||
}
|
||||
});
|
||||
Ember.run(() => {
|
||||
this.set('canEditCurrentFolder', canEdit && this.get('sessionService').authenticated);
|
||||
});
|
||||
});
|
||||
},
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||
//
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
//
|
||||
// You can operate outside the AGPL restrictions by purchasing
|
||||
// Documize Enterprise Edition and obtaining a commercial license
|
||||
// by contacting <sales@documize.com>.
|
||||
// by contacting <sales@documize.com>.
|
||||
//
|
||||
// https://documize.com
|
||||
|
||||
|
@ -14,23 +14,17 @@ import models from '../utils/model';
|
|||
|
||||
export default Ember.Service.extend({
|
||||
sessionService: Ember.inject.service('session'),
|
||||
ajax: Ember.inject.service(),
|
||||
|
||||
// Returns attributes for specified org id.
|
||||
getOrg(id) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`organizations/${id}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let org = models.OrganizationModel.create(response);
|
||||
resolve(org);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'GET'
|
||||
}).then((response) =>{
|
||||
let org = models.OrganizationModel.create(response);
|
||||
return org;
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -43,19 +37,9 @@ export default Ember.Service.extend({
|
|||
this.get('sessionService').get('appMeta').setSafe('message', org.message);
|
||||
this.get('sessionService').get('appMeta').setSafe('title', org.title);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'PUT',
|
||||
data: JSON.stringify(org),
|
||||
contentType: 'json',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'PUT',
|
||||
data: JSON.stringify(org)
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||
//
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
//
|
||||
// You can operate outside the AGPL restrictions by purchasing
|
||||
// Documize Enterprise Edition and obtaining a commercial license
|
||||
// by contacting <sales@documize.com>.
|
||||
// by contacting <sales@documize.com>.
|
||||
//
|
||||
// https://documize.com
|
||||
|
||||
|
@ -13,22 +13,14 @@ import Ember from 'ember';
|
|||
|
||||
export default Ember.Service.extend({
|
||||
sessionService: Ember.inject.service('session'),
|
||||
ajax: Ember.inject.service(),
|
||||
|
||||
// getUsers returns all users for organization.
|
||||
find(keywords) {
|
||||
let url = this.get('sessionService').appMeta.getUrl("search?keywords=" + encodeURIComponent(keywords));
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: "GET"
|
||||
});
|
||||
},
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||
//
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
//
|
||||
// You can operate outside the AGPL restrictions by purchasing
|
||||
// Documize Enterprise Edition and obtaining a commercial license
|
||||
// by contacting <sales@documize.com>.
|
||||
// by contacting <sales@documize.com>.
|
||||
//
|
||||
// https://documize.com
|
||||
|
||||
|
@ -15,26 +15,21 @@ import BaseService from '../services/base';
|
|||
|
||||
export default BaseService.extend({
|
||||
sessionService: Ember.inject.service('session'),
|
||||
ajax: Ember.inject.service(),
|
||||
|
||||
// Returns all available sections.
|
||||
getAll() {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`sections`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.SectionModel.create(obj));
|
||||
});
|
||||
resolve(data);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
return this.get('ajax').request(url,{
|
||||
method: 'GET'
|
||||
}).then((response)=>{
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.SectionModel.create(obj));
|
||||
});
|
||||
|
||||
return data;
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -46,19 +41,9 @@ export default BaseService.extend({
|
|||
let endpoint = `sections?documentID=${documentId}§ion=${section}&method=${method}`;
|
||||
let url = this.get('sessionService').appMeta.getUrl(endpoint);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'POST',
|
||||
data: JSON.stringify(data),
|
||||
contentType: "application/json",
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url, {
|
||||
data: JSON.stringify(data),
|
||||
contentType: "application/json"
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -66,26 +51,18 @@ export default BaseService.extend({
|
|||
refresh(documentId) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`sections/refresh?documentID=${documentId}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
// resolve(response);
|
||||
let pages = [];
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'GET'
|
||||
}).then((response)=>{
|
||||
let pages = [];
|
||||
|
||||
if (is.not.null(response) && is.array(response) && response.length > 0) {
|
||||
_.each(response, function(page) {
|
||||
pages.pushObject(models.PageModel.create(page));
|
||||
});
|
||||
}
|
||||
if (is.not.null(response) && is.array(response) && response.length > 0) {
|
||||
_.each(response, function(page) {
|
||||
pages.pushObject(models.PageModel.create(page));
|
||||
});
|
||||
}
|
||||
|
||||
resolve(pages);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return pages;
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -24,6 +24,7 @@ export default Ember.Service.extend({
|
|||
authenticated: false,
|
||||
folderPermissions: null,
|
||||
currentFolder: null,
|
||||
ajax: Ember.inject.service(),
|
||||
|
||||
isAdmin: function() {
|
||||
if (this.authenticated && is.not.null(this.user) && this.user.id !== "") {
|
||||
|
@ -50,68 +51,48 @@ export default Ember.Service.extend({
|
|||
|
||||
// Authentication
|
||||
login: function(credentials) {
|
||||
var self = this;
|
||||
var url = self.appMeta.getUrl('public/authenticate');
|
||||
let url = this.appMeta.getUrl('public/authenticate');
|
||||
let domain = netUtil.getSubdomain();
|
||||
|
||||
this.clearSession();
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
if (is.empty(credentials.email) || is.empty(credentials.password)) {
|
||||
reject("invalid");
|
||||
return;
|
||||
}
|
||||
if (is.empty(credentials.email) || is.empty(credentials.password)) {
|
||||
return Ember.RSVP.reject("invalid");
|
||||
}
|
||||
|
||||
var encoded = encodingUtil.Base64.encode(domain + ":" + credentials.email + ":" + credentials.password);
|
||||
var header = {
|
||||
'Authorization': 'Basic ' + encoded
|
||||
};
|
||||
var encoded = encodingUtil.Base64.encode(domain + ":" + credentials.email + ":" + credentials.password);
|
||||
var headers = {
|
||||
'Authorization': 'Basic ' + encoded
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'POST',
|
||||
headers: header,
|
||||
success: function(response) {
|
||||
self.setSession(response.token, models.UserModel.create(response.user));
|
||||
self.get('ready', true);
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url, {
|
||||
headers
|
||||
}).then((response)=>{
|
||||
this.setSession(response.token, models.UserModel.create(response.user));
|
||||
this.get('ready', true);
|
||||
return response;
|
||||
});
|
||||
},
|
||||
|
||||
// SSO in the form of 'domain:email:password'
|
||||
sso: function(credentials) {
|
||||
var self = this;
|
||||
var url = self.appMeta.getUrl('public/authenticate');
|
||||
let url = this.appMeta.getUrl('public/authenticate');
|
||||
this.clearSession();
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
if (is.empty(credentials.email) || is.empty(credentials.password)) {
|
||||
reject("invalid");
|
||||
return;
|
||||
}
|
||||
if (is.empty(credentials.email) || is.empty(credentials.password)) {
|
||||
return Ember.RSVP.reject("invalid");
|
||||
}
|
||||
|
||||
var header = {
|
||||
'Authorization': 'Basic ' + credentials
|
||||
};
|
||||
var headers = {
|
||||
'Authorization': 'Basic ' + credentials
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'POST',
|
||||
headers: header,
|
||||
success: function(response) {
|
||||
self.setSession(response.token, models.UserModel.create(response.user));
|
||||
self.get('ready', true);
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url, {
|
||||
headers
|
||||
}).then((response)=>{
|
||||
this.setSession(response.token, models.UserModel.create(response.user));
|
||||
this.get('ready', true);
|
||||
return response;
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -192,51 +173,35 @@ export default Ember.Service.extend({
|
|||
// this.set('popupBlocked', false);
|
||||
// }
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve) {
|
||||
$.ajax({
|
||||
url: self.get('appMeta').getUrl("public/meta"),
|
||||
type: 'GET',
|
||||
contentType: 'json',
|
||||
success: function(response) {
|
||||
self.get('appMeta').set('orgId', response.orgId);
|
||||
self.get('appMeta').setSafe('title', response.title);
|
||||
self.get('appMeta').set('version', response.version);
|
||||
self.get('appMeta').setSafe('message', response.message);
|
||||
self.get('appMeta').set('allowAnonymousAccess', response.allowAnonymousAccess);
|
||||
let url = this.get('appMeta').getUrl("public/meta");
|
||||
|
||||
let token = self.getSessionItem('token');
|
||||
return this.get('ajax').request(url)
|
||||
.then((response) => {
|
||||
this.get('appMeta').set('orgId', response.orgId);
|
||||
this.get('appMeta').setSafe('title', response.title);
|
||||
this.get('appMeta').set('version', response.version);
|
||||
this.get('appMeta').setSafe('message', response.message);
|
||||
this.get('appMeta').set('allowAnonymousAccess', response.allowAnonymousAccess);
|
||||
|
||||
if (is.not.undefined(token)) {
|
||||
// We now validate current token
|
||||
let tokenCheckUrl = self.get('appMeta').getUrl(`public/validate?token=${token}`);
|
||||
let token = this.getSessionItem('token');
|
||||
|
||||
$.ajax({
|
||||
url: tokenCheckUrl,
|
||||
type: 'GET',
|
||||
contentType: 'json',
|
||||
success: function(user) {
|
||||
self.setSession(token, models.UserModel.create(user));
|
||||
self.set('ready', true);
|
||||
resolve();
|
||||
},
|
||||
error: function(reason) {
|
||||
if (reason.status === 401 || reason.status === 403) {
|
||||
localStorage.clear();
|
||||
window.location.href = "/auth/login";
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
self.set('ready', true);
|
||||
resolve();
|
||||
}
|
||||
},
|
||||
error: function(reason) {
|
||||
if (is.not.undefined(token)) {
|
||||
// We now validate current token
|
||||
let tokenCheckUrl = this.get('appMeta').getUrl(`public/validate?token=${token}`);
|
||||
|
||||
return this.get('ajax').request(tokenCheckUrl, {
|
||||
method: 'GET',
|
||||
contentType: 'json'
|
||||
}).then((user) => {
|
||||
this.setSession(token, models.UserModel.create(user));
|
||||
this.set('ready', true);
|
||||
}).catch((reason) => {
|
||||
if (reason.status === 401 || reason.status === 403) {
|
||||
window.location.href = "https://documize.com";
|
||||
localStorage.clear();
|
||||
window.location.href = "/auth/login";
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||
//
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
//
|
||||
// You can operate outside the AGPL restrictions by purchasing
|
||||
// Documize Enterprise Edition and obtaining a commercial license
|
||||
// by contacting <sales@documize.com>.
|
||||
// by contacting <sales@documize.com>.
|
||||
//
|
||||
// https://documize.com
|
||||
|
||||
|
@ -14,85 +14,53 @@ import models from '../utils/model';
|
|||
|
||||
export default Ember.Service.extend({
|
||||
sessionService: Ember.inject.service('session'),
|
||||
ajax: Ember.inject.service(),
|
||||
|
||||
importStockTemplate: function(folderId, templateId) {
|
||||
let self = this;
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("templates/" + templateId + "/folder/" + folderId + "?type=stock"),
|
||||
type: 'POST',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
let url = this.get('sessionService').appMeta.getUrl("templates/" + templateId + "/folder/" + folderId + "?type=stock");
|
||||
|
||||
return this.get('ajax').request(url, {
|
||||
method: "POST"
|
||||
});
|
||||
},
|
||||
|
||||
importSavedTemplate: function(folderId, templateId) {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("templates/" + templateId + "/folder/" + folderId + "?type=saved");
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("templates/" + templateId + "/folder/" + folderId + "?type=saved"),
|
||||
type: 'POST',
|
||||
success: function(doc) {
|
||||
let docModel = models.DocumentModel.create(doc);
|
||||
resolve(docModel);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url).then((doc)=>{
|
||||
let docModel = models.DocumentModel.create(doc);
|
||||
return docModel;
|
||||
});
|
||||
},
|
||||
|
||||
getSavedTemplates() {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("templates");
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("templates"),
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
if (is.not.array(response)) {
|
||||
response = [];
|
||||
}
|
||||
let templates = Ember.ArrayProxy.create({
|
||||
content: Ember.A([])
|
||||
});
|
||||
|
||||
_.each(response, function(template) {
|
||||
let templateModel = models.TemplateModel.create(template);
|
||||
templates.pushObject(templateModel);
|
||||
});
|
||||
|
||||
resolve(templates);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'GET'
|
||||
}).then((response) => {
|
||||
if (is.not.array(response)) {
|
||||
response = [];
|
||||
}
|
||||
let templates = Ember.ArrayProxy.create({
|
||||
content: Ember.A([])
|
||||
});
|
||||
|
||||
_.each(response, function(template) {
|
||||
let templateModel = models.TemplateModel.create(template);
|
||||
templates.pushObject(templateModel);
|
||||
});
|
||||
|
||||
return templates;
|
||||
});
|
||||
},
|
||||
|
||||
getStockTemplates() {
|
||||
let self = this;
|
||||
let url = this.get('sessionService').appMeta.getUrl("templates/stock");
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: self.get('sessionService').appMeta.getUrl("templates/stock"),
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'GET'
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
|
||||
//
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// This software (Documize Community Edition) is licensed under
|
||||
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
|
||||
//
|
||||
// You can operate outside the AGPL restrictions by purchasing
|
||||
// Documize Enterprise Edition and obtaining a commercial license
|
||||
// by contacting <sales@documize.com>.
|
||||
// by contacting <sales@documize.com>.
|
||||
//
|
||||
// https://documize.com
|
||||
|
||||
|
@ -14,24 +14,18 @@ import models from '../utils/model';
|
|||
|
||||
export default Ember.Service.extend({
|
||||
sessionService: Ember.inject.service('session'),
|
||||
ajax: Ember.inject.service(),
|
||||
|
||||
// Adds a new user.
|
||||
add(user) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`users`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'POST',
|
||||
data: JSON.stringify(user),
|
||||
contentType: 'json',
|
||||
success: function(response) {
|
||||
resolve(models.UserModel.create(response));
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
type: 'POST',
|
||||
data: JSON.stringify(user),
|
||||
contentType: 'json'
|
||||
}).then(function(response){
|
||||
return models.UserModel.create(response);
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -39,17 +33,10 @@ export default Ember.Service.extend({
|
|||
getUser(userId) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`users/${userId}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
resolve(models.UserModel.create(response));
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
type: 'GET'
|
||||
}).then((response) => {
|
||||
return models.UserModel.create(response);
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -57,21 +44,9 @@ export default Ember.Service.extend({
|
|||
getAll() {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`users`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.UserModel.create(obj));
|
||||
});
|
||||
|
||||
resolve(data);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
return this.get('ajax').request(url).then((response) => {
|
||||
return response.map(function(obj){
|
||||
return models.UserModel.create(obj);
|
||||
});
|
||||
});
|
||||
},
|
||||
|
@ -80,22 +55,15 @@ export default Ember.Service.extend({
|
|||
getFolderUsers(folderId) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`users/folder/${folderId}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
success: function(response) {
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.UserModel.create(obj));
|
||||
});
|
||||
|
||||
resolve(data);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
return this.get('ajax').request(url, {
|
||||
method: "GET"
|
||||
}).then((response)=>{
|
||||
let data = [];
|
||||
_.each(response, function(obj) {
|
||||
data.pushObject(models.UserModel.create(obj));
|
||||
});
|
||||
|
||||
return data;
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -104,19 +72,10 @@ export default Ember.Service.extend({
|
|||
let userId = user.get('id');
|
||||
let url = this.get('sessionService').appMeta.getUrl(`users/${userId}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'PUT',
|
||||
data: JSON.stringify(user),
|
||||
contentType: 'json',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
type: 'PUT',
|
||||
data: JSON.stringify(user),
|
||||
contentType: 'json'
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -124,18 +83,8 @@ export default Ember.Service.extend({
|
|||
updatePassword(userId, password) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`users/${userId}/password`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'POST',
|
||||
data: password,
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').post(url, {
|
||||
data: password
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -143,46 +92,27 @@ export default Ember.Service.extend({
|
|||
remove(userId) {
|
||||
let url = this.get('sessionService').appMeta.getUrl(`users/${userId}`);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'DELETE',
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'DELETE'
|
||||
});
|
||||
},
|
||||
|
||||
// Request password reset.
|
||||
forgotPassword(email) {
|
||||
var url = this.get('sessionService').appMeta.getUrl('public/forgot');
|
||||
let url = this.get('sessionService').appMeta.getUrl('public/forgot');
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
if (is.empty(email)) {
|
||||
reject("invalid");
|
||||
return;
|
||||
}
|
||||
if (is.empty(email)) {
|
||||
return Ember.RSVP.reject("invalid");
|
||||
}
|
||||
|
||||
var data = JSON.stringify({
|
||||
Email: email
|
||||
});
|
||||
let data = JSON.stringify({
|
||||
Email: email
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
data: data,
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: 'POST',
|
||||
dataType: 'json',
|
||||
data: data
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -190,23 +120,13 @@ export default Ember.Service.extend({
|
|||
resetPassword(token, password) {
|
||||
var url = this.get('sessionService').appMeta.getUrl('public/reset/' + token);
|
||||
|
||||
return new Ember.RSVP.Promise(function(resolve, reject) {
|
||||
if (is.empty(token) || is.empty(password)) {
|
||||
reject("invalid");
|
||||
return;
|
||||
}
|
||||
if (is.empty(token) || is.empty(password)) {
|
||||
return Ember.RSVP.reject("invalid");
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'POST',
|
||||
data: password,
|
||||
success: function(response) {
|
||||
resolve(response);
|
||||
},
|
||||
error: function(reason) {
|
||||
reject(reason);
|
||||
}
|
||||
});
|
||||
return this.get('ajax').request(url, {
|
||||
method: "POST",
|
||||
data: password
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -8,7 +8,10 @@
|
|||
"jquery": "*",
|
||||
"loader.js": "^3.5.0",
|
||||
"qunit": "~1.20.0",
|
||||
"install": "~1.0.4"
|
||||
"install": "~1.0.4",
|
||||
"pretender": "~0.10.1",
|
||||
"lodash": "~3.7.0",
|
||||
"Faker": "~3.0.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"jquery": ">=2.1.1",
|
||||
|
|
|
@ -15,7 +15,7 @@ module.exports = function(environment) {
|
|||
var ENV = {
|
||||
modulePrefix: 'documize',
|
||||
podModulePrefix: 'documize/pods',
|
||||
locationType: 'history',
|
||||
locationType: 'auto',
|
||||
environment: environment,
|
||||
baseURL: '/',
|
||||
apiHost: '',
|
||||
|
@ -25,12 +25,21 @@ module.exports = function(environment) {
|
|||
EmberENV: {
|
||||
FEATURES: {}
|
||||
},
|
||||
APP: {}
|
||||
"ember-cli-mirage": {
|
||||
enabled: false
|
||||
},
|
||||
APP: {
|
||||
// Allows to disable audit service in tests
|
||||
auditEnabled: true
|
||||
}
|
||||
};
|
||||
|
||||
if (environment === 'development') {
|
||||
ENV.APP.LOG_TRANSITIONS = true;
|
||||
ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
|
||||
ENV['ember-cli-mirage'] = {
|
||||
enabled: false
|
||||
};
|
||||
|
||||
ENV.apiHost = "https://localhost:5001";
|
||||
// ENV.apiHost = "https://demo1.dev:5001";
|
||||
|
@ -42,15 +51,16 @@ module.exports = function(environment) {
|
|||
ENV.APP.LOG_VIEW_LOOKUPS = false;
|
||||
// ENV.APP.LOG_TRANSITIONS = false;
|
||||
// ENV.APP.LOG_TRANSITIONS_INTERNAL = false;
|
||||
ENV.APP.LOG_TRANSITIONS = true;
|
||||
ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
|
||||
|
||||
// ENV.baseURL = '/';
|
||||
// ENV.locationType = 'none';
|
||||
// ENV.APP.rootElement = '#ember-testing';
|
||||
ENV.baseURL = '/';
|
||||
ENV.locationType = 'none';
|
||||
ENV.APP.rootElement = '#ember-testing';
|
||||
ENV['ember-cli-mirage'] = {
|
||||
enabled: true
|
||||
};
|
||||
ENV.APP.auditEnabled = false;
|
||||
|
||||
ENV.apiHost = "https://localhost:5001";
|
||||
// ENV.apiHost = "https://demo1.dev:5001";
|
||||
}
|
||||
|
||||
if (environment === 'production') {
|
||||
|
|
|
@ -15,9 +15,6 @@ var isDevelopment = EmberApp.env() === 'development';
|
|||
|
||||
module.exports = function(defaults) {
|
||||
var app = new EmberApp(defaults, {
|
||||
tests: true,
|
||||
storeConfigInMeta: false,
|
||||
|
||||
fingerprint: {
|
||||
enabled: true,
|
||||
extensions: ['js', 'css'],
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"broccoli-asset-rev": "^2.4.2",
|
||||
"ember-ajax": "0.7.1",
|
||||
"ember-ajax": "2.3.2",
|
||||
"ember-cli": "2.5.0",
|
||||
"ember-cli-app-version": "^1.0.0",
|
||||
"ember-cli-babel": "^5.1.6",
|
||||
|
@ -29,6 +29,7 @@
|
|||
"ember-cli-htmlbars-inline-precompile": "^0.3.1",
|
||||
"ember-cli-inject-live-reload": "^1.4.0",
|
||||
"ember-cli-jshint": "^1.0.0",
|
||||
"ember-cli-mirage": "0.1.13",
|
||||
"ember-cli-qunit": "^1.4.0",
|
||||
"ember-cli-release": "0.2.8",
|
||||
"ember-cli-sass": "5.3.1",
|
||||
|
@ -40,4 +41,4 @@
|
|||
"ember-resolver": "^2.0.3",
|
||||
"loader.js": "^4.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,16 @@
|
|||
"andThen",
|
||||
"currentURL",
|
||||
"currentPath",
|
||||
"currentRouteName"
|
||||
"currentRouteName",
|
||||
"stubSession",
|
||||
"stubAudit",
|
||||
"pauseTest",
|
||||
"userLogin",
|
||||
"skip",
|
||||
"waitToAppear",
|
||||
"waitToAppear",
|
||||
"stubUserNotification",
|
||||
"is"
|
||||
],
|
||||
"node": false,
|
||||
"browser": false,
|
||||
|
|
18
app/tests/acceptance/anon-access-disabled-test.js
Normal file
18
app/tests/acceptance/anon-access-disabled-test.js
Normal file
|
@ -0,0 +1,18 @@
|
|||
import { test } from 'qunit';
|
||||
import moduleForAcceptance from 'documize/tests/helpers/module-for-acceptance';
|
||||
|
||||
moduleForAcceptance('Acceptance | Anon access disabled');
|
||||
|
||||
|
||||
test('visiting / when not authenticated and with { allowAnonymousAccess: false } takes user to login', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
server.createList('folder', 2);
|
||||
visit('/');
|
||||
|
||||
andThen(function() {
|
||||
assert.equal(currentURL(), '/auth/login');
|
||||
findWithAssert('#authEmail');
|
||||
findWithAssert('#authPassword');
|
||||
findWithAssert('button');
|
||||
});
|
||||
});
|
35
app/tests/acceptance/anon-access-enabled-test.js
Normal file
35
app/tests/acceptance/anon-access-enabled-test.js
Normal file
|
@ -0,0 +1,35 @@
|
|||
import { test } from 'qunit';
|
||||
import moduleForAcceptance from 'documize/tests/helpers/module-for-acceptance';
|
||||
|
||||
moduleForAcceptance('Acceptance | Anon access enabled');
|
||||
|
||||
test('visiting / when not authenticated and with { allowAnonymousAccess: true } takes user to folder view', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: true });
|
||||
server.createList('folder', 2);
|
||||
visit('/');
|
||||
// return pauseTest();
|
||||
|
||||
andThen(function() {
|
||||
assert.equal(find('.login').length, 1, 'Login button is displayed');
|
||||
assert.equal(find('.documents-list .document').length, 2, '2 document displayed');
|
||||
assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project', 'Dashboard and public spaces are displayed without being signed in');
|
||||
});
|
||||
});
|
||||
|
||||
test('visiting / when authenticated and with { allowAnonymousAccess: true } takes user to dashboard', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: true });
|
||||
server.createList('folder', 2);
|
||||
visit('/');
|
||||
|
||||
andThen(function() {
|
||||
assert.equal(find('.login').length, 1, 'Login button is displayed');
|
||||
assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project', 'Dashboard displayed without being signed in');
|
||||
});
|
||||
|
||||
userLogin();
|
||||
|
||||
andThen(function() {
|
||||
assert.equal(find('.login').length, 0, 'Login button is not displayed');
|
||||
assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project', 'Dashboard is displayed after user is signed in');
|
||||
});
|
||||
});
|
30
app/tests/acceptance/authentication-test.js
Normal file
30
app/tests/acceptance/authentication-test.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
import { test } from 'qunit';
|
||||
import moduleForAcceptance from 'documize/tests/helpers/module-for-acceptance';
|
||||
|
||||
moduleForAcceptance('Acceptance | Authentication');
|
||||
|
||||
test('visiting /auth/login and logging in', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
server.createList('folder', 2);
|
||||
visit('/auth/login');
|
||||
|
||||
fillIn('#authEmail', 'brizdigital@gmail.com');
|
||||
fillIn('#authPassword', 'zinyando123');
|
||||
click('button');
|
||||
|
||||
andThen(function() {
|
||||
assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project', 'Login successfull');
|
||||
});
|
||||
});
|
||||
|
||||
test('logging out a user', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
server.createList('folder', 2);
|
||||
userLogin();
|
||||
|
||||
visit('/auth/logout');
|
||||
|
||||
andThen(function() {
|
||||
assert.equal(currentURL(), '/auth/login', 'Login successfull');
|
||||
});
|
||||
});
|
188
app/tests/acceptance/documents-space-test.js
Normal file
188
app/tests/acceptance/documents-space-test.js
Normal file
|
@ -0,0 +1,188 @@
|
|||
import { test } from 'qunit';
|
||||
import moduleForAcceptance from 'documize/tests/helpers/module-for-acceptance';
|
||||
|
||||
moduleForAcceptance('Acceptance | Documents space');
|
||||
|
||||
// test('Adding a new folder space', function(assert) {
|
||||
// server.create('meta', { allowAnonymousAccess: false });
|
||||
// server.createList('folder', 2);
|
||||
// server.createList('permission', 4);
|
||||
// userLogin();
|
||||
// visit('/s/VzMuyEw_3WqiafcG/my-project');
|
||||
//
|
||||
// andThen(function() {
|
||||
// let personalSpaces = find('.section div:contains(PERSONAL)').length;
|
||||
// assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project');
|
||||
// assert.equal(personalSpaces, 1, '1 personal space is listed');
|
||||
// });
|
||||
//
|
||||
// click('#add-folder-button');
|
||||
//
|
||||
// fillIn('#new-folder-name', 'body', 'Test Folder');
|
||||
//
|
||||
// click('.actions div:contains(Add)', 'body');
|
||||
//
|
||||
// andThen(function() {
|
||||
// assert.equal(currentURL(), '/s/V0Vy5Uw_3QeDAMW9/test-folder');
|
||||
// });
|
||||
// });
|
||||
|
||||
// test('Adding a document to a space', function(assert) {
|
||||
// server.create('meta', { allowAnonymousAccess: false });
|
||||
// server.createList('folder', 2);
|
||||
// server.createList('permission', 4);
|
||||
// userLogin();
|
||||
// visit('/s/VzMuyEw_3WqiafcG/my-project');
|
||||
//
|
||||
// andThen(function() {
|
||||
//
|
||||
// let numberOfDocuments = find('.documents-list li').length;
|
||||
// assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project');
|
||||
// assert.equal(numberOfDocuments, 2, '2 documents listed');
|
||||
// });
|
||||
//
|
||||
// click('#start-document-button');
|
||||
// click('.actions div:contains(Add)', 'body');
|
||||
//
|
||||
// andThen(function() {
|
||||
// let numberOfDocuments = find('.documents-list li').length;
|
||||
// assert.equal(numberOfDocuments, 3, '3 documents listed');
|
||||
// assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project');
|
||||
// // return pauseTest();
|
||||
// });
|
||||
// });
|
||||
|
||||
test('visiting space settings page', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
server.createList('folder', 2);
|
||||
server.createList('permission', 4);
|
||||
userLogin();
|
||||
visit('/s/VzMuyEw_3WqiafcG/my-project');
|
||||
|
||||
click('#folder-settings-button');
|
||||
|
||||
andThen(function() {
|
||||
checkForCommonAsserts();
|
||||
assert.equal(find('#folderName').val().trim(), 'My Project', 'Space name displayed in input box');
|
||||
assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project/settings');
|
||||
});
|
||||
});
|
||||
|
||||
test('changing space name', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
server.createList('folder', 2);
|
||||
server.createList('permission', 4);
|
||||
userLogin();
|
||||
visit('/s/VzMuyEw_3WqiafcG/my-project/settings');
|
||||
|
||||
fillIn('#folderName', 'Test Space');
|
||||
click('.button-blue');
|
||||
|
||||
andThen(function() {
|
||||
let spaceName = find('.breadcrumb-menu .selected').text().trim();
|
||||
checkForCommonAsserts();
|
||||
assert.equal(spaceName, 'Test Space', 'Space name has been changed');
|
||||
assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project/settings');
|
||||
});
|
||||
});
|
||||
|
||||
test('sharing a space', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
server.createList('folder', 2);
|
||||
server.createList('permission', 4);
|
||||
userLogin();
|
||||
visit('/s/VzMuyEw_3WqiafcG/my-project/settings');
|
||||
|
||||
click(('.sidebar-menu .options li:contains(Share)'));
|
||||
fillIn('#inviteEmail', 'share-test@gmail.com');
|
||||
click('.button-blue');
|
||||
|
||||
andThen(function() {
|
||||
checkForCommonAsserts();
|
||||
assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project/settings');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// Test will pass after moving to factories
|
||||
test('changing space permissions', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
server.createList('folder', 2);
|
||||
server.createList('permission', 4);
|
||||
userLogin();
|
||||
andThen(function() {
|
||||
let numberOfPublicFolders = find('.folders-list div:first .list a').length;
|
||||
assert.equal(numberOfPublicFolders, 1, '1 folder listed as public');
|
||||
assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project');
|
||||
});
|
||||
|
||||
visit('/s/VzMygEw_3WrtFzto/test/settings');
|
||||
click(('.sidebar-menu .options li:contains(Permissions)'));
|
||||
|
||||
click('tr:contains(Everyone) #canView-');
|
||||
click('tr:contains(Everyone) #canEdit-');
|
||||
click('.button-blue');
|
||||
|
||||
visit('/s/VzMuyEw_3WqiafcG/my-project');
|
||||
|
||||
andThen(function() {
|
||||
let numberOfPublicFolders = find('.folders-list div:first .list a').length;
|
||||
assert.equal(numberOfPublicFolders, 2, '2 folder listed as public');
|
||||
assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project');
|
||||
});
|
||||
});
|
||||
|
||||
test('deleting a space', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
server.createList('folder', 2);
|
||||
server.createList('permission', 4);
|
||||
userLogin();
|
||||
visit('/s/VzMuyEw_3WqiafcG/my-project/settings');
|
||||
|
||||
click('.sidebar-menu .options li:contains(Delete)');
|
||||
|
||||
andThen(function() {
|
||||
checkForCommonAsserts();
|
||||
assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project/settings');
|
||||
});
|
||||
});
|
||||
|
||||
// test('deleting a document', function(assert) {
|
||||
// server.create('meta', { allowAnonymousAccess: false });
|
||||
// server.createList('folder', 2);
|
||||
// server.createList('permission', 4);
|
||||
// userLogin();
|
||||
// visit('/s/VzMuyEw_3WqiafcG/my-project');
|
||||
//
|
||||
// andThen(function() {
|
||||
// let deleteButton = find('#delete-documents-button');
|
||||
// let numberOfDocuments = find('.documents-list li');
|
||||
// assert.equal(numberOfDocuments.length, 2, '2 documents are displayed');
|
||||
// assert.equal(deleteButton.length, 0, 'Delete button not displayed');
|
||||
// });
|
||||
//
|
||||
// click('.documents-list li:first .checkbox');
|
||||
//
|
||||
// andThen(function() {
|
||||
// let deleteButton = find('#delete-documents-button');
|
||||
// assert.equal(deleteButton.length, 1, 'Delete button displayed after selecting document');
|
||||
// });
|
||||
//
|
||||
// click('#delete-documents-button');
|
||||
//
|
||||
// waitToAppear('.drop-content');
|
||||
// click('.actions div:contains(Delete)', 'body');
|
||||
//
|
||||
// andThen(function() {
|
||||
// let numberOfDocuments = find('.documents-list li');
|
||||
// assert.equal(numberOfDocuments.length, 1, '1 documents is displayed');
|
||||
// });
|
||||
// });
|
||||
|
||||
function checkForCommonAsserts() {
|
||||
findWithAssert('.sidebar-menu');
|
||||
findWithAssert('.options li:contains(General)');
|
||||
findWithAssert('.options li:contains(Share)');
|
||||
findWithAssert('.options li:contains(Permissions)');
|
||||
findWithAssert('.options li:contains(Delete)');
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
import Ember from 'ember';
|
||||
import {
|
||||
module,
|
||||
test
|
||||
} from 'qunit';
|
||||
import startApp from 'ember-testing/tests/helpers/start-app';
|
||||
import moduleForAcceptance from 'documize/tests/helpers/module-for-acceptance';
|
||||
|
||||
moduleForAcceptance('Acceptance | login');
|
||||
|
||||
var application;
|
||||
|
||||
module('Acceptance | login', {
|
||||
beforeEach: function() {
|
||||
application = startApp();
|
||||
window.localStorage.removeItem('token');
|
||||
window.localStorage.removeItem('user');
|
||||
window.localStorage.removeItem('folder');
|
||||
},
|
||||
|
||||
afterEach: function() {
|
||||
Ember.run(application, 'destroy');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
test('visiting /auth/login', function(assert) {
|
||||
visit('/auth/login');
|
||||
// fillIn('#authEmail', 'harvey@kandola.com');
|
||||
// fillIn('#authPassword', 'demo123');
|
||||
// click('button');
|
||||
andThen(function() {
|
||||
assert.equal(currentURL(), '/auth/login');
|
||||
});
|
||||
});
|
|
@ -1,12 +0,0 @@
|
|||
import { test } from 'qunit';
|
||||
import moduleForAcceptance from 'documize/tests/helpers/module-for-acceptance';
|
||||
|
||||
moduleForAcceptance('Acceptance | nologin');
|
||||
|
||||
test('visiting /', function(assert) {
|
||||
visit('/');
|
||||
|
||||
andThen(function() {
|
||||
assert.equal(currentURL().substring(0, 3), '/s/'); // NOTE because we do not know the correct uuid/space for the database being tested
|
||||
});
|
||||
});
|
41
app/tests/acceptance/user-profile-test.js
Normal file
41
app/tests/acceptance/user-profile-test.js
Normal file
|
@ -0,0 +1,41 @@
|
|||
import { test } from 'qunit';
|
||||
import moduleForAcceptance from 'documize/tests/helpers/module-for-acceptance';
|
||||
|
||||
moduleForAcceptance('Acceptance | user profile');
|
||||
|
||||
test('visiting /profile', function(assert) {
|
||||
server.createList('folder', 2);
|
||||
userLogin();
|
||||
visit('/profile');
|
||||
|
||||
andThen(function() {
|
||||
assert.equal(currentURL(), '/profile');
|
||||
assert.equal(find('#firstname').val(), 'Lennex', 'Firstaname input displays correct value');
|
||||
assert.equal(find('#lastname').val(), 'Zinyando', 'Lastname input displays correct value');
|
||||
assert.equal(find('#email').val(), 'brizdigital@gmail.com', 'Email input displays correct value');
|
||||
});
|
||||
});
|
||||
|
||||
test('changing user details and email ', function(assert) {
|
||||
server.createList('folder', 2);
|
||||
userLogin();
|
||||
visit('/profile');
|
||||
|
||||
andThen(function() {
|
||||
assert.equal(currentURL(), '/profile');
|
||||
assert.equal(find('.name').text().trim(), 'Lennex Zinyando', 'Profile name displayed');
|
||||
assert.equal(find('#firstname').val(), 'Lennex', 'Firstaname input displays correct value');
|
||||
assert.equal(find('#lastname').val(), 'Zinyando', 'Lastname input displays correct value');
|
||||
assert.equal(find('#email').val(), 'brizdigital@gmail.com', 'Email input displays correct value');
|
||||
});
|
||||
|
||||
fillIn('#firstname', 'Test');
|
||||
fillIn('#lastname', 'User');
|
||||
fillIn('#email', 'test.user@domain.com');
|
||||
click('.button-blue');
|
||||
|
||||
andThen(function() {
|
||||
assert.equal(currentURL(), '/s/VzMuyEw_3WqiafcG/my-project');
|
||||
assert.equal(find('.content .name').text().trim(), 'Test User', 'Profile name displayed');
|
||||
});
|
||||
});
|
100
app/tests/acceptance/user-settings-test.js
Normal file
100
app/tests/acceptance/user-settings-test.js
Normal file
|
@ -0,0 +1,100 @@
|
|||
import { test} from 'qunit';
|
||||
import moduleForAcceptance from 'documize/tests/helpers/module-for-acceptance';
|
||||
|
||||
moduleForAcceptance('Acceptance | User Settings');
|
||||
|
||||
test('visiting /settings/general', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
userLogin();
|
||||
visit('/settings/general');
|
||||
|
||||
andThen(function() {
|
||||
assert.equal(currentURL(), '/settings/general');
|
||||
assert.equal(find('#siteTitle').val(), 'EmberSherpa', 'Website title input is filled in correctly');
|
||||
assert.equal(find('textarea').val(), 'This Documize instance contains all our team documentation', 'Message is set correctly');
|
||||
assert.equal(find('#allowAnonymousAccess').is(':checked'), false, 'Allow anonymouus checkbox is unchecked');
|
||||
});
|
||||
});
|
||||
|
||||
test('changing the Website title and description', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
userLogin();
|
||||
visit('/settings/general');
|
||||
|
||||
andThen(function() {
|
||||
let websiteTitle = find('.content .title').text().trim();
|
||||
let websiteTitleInput = find('#siteTitle').val();
|
||||
assert.equal(websiteTitleInput, websiteTitle, 'Website title is set to EmberSherpa');
|
||||
});
|
||||
|
||||
fillIn('#siteTitle', 'Documize Tests');
|
||||
click('.button-blue');
|
||||
|
||||
andThen(function() {
|
||||
let websiteTitle = find('.content .title').text().trim();
|
||||
let websiteTitleInput = find('#siteTitle').val();
|
||||
assert.equal(websiteTitleInput, websiteTitle, 'Website title is set to Documize Tests');
|
||||
});
|
||||
});
|
||||
|
||||
test('visiting /settings/folders', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
userLogin();
|
||||
visit('/settings/folders');
|
||||
|
||||
andThen(function() {
|
||||
checkForCommonAsserts();
|
||||
assert.equal(currentURL(), '/settings/folders');
|
||||
});
|
||||
});
|
||||
|
||||
test('visiting /settings/users', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
userLogin();
|
||||
visit('/settings/users');
|
||||
|
||||
andThen(function() {
|
||||
checkForCommonAsserts();
|
||||
findWithAssert('.user-list');
|
||||
let numberOfUsers = find('.user-list tr').length;
|
||||
assert.equal(numberOfUsers, 3, '2 Users listed');
|
||||
assert.equal(currentURL(), '/settings/users');
|
||||
});
|
||||
});
|
||||
|
||||
test('add a new user', function(assert) {
|
||||
server.create('meta', { allowAnonymousAccess: false });
|
||||
userLogin();
|
||||
visit('/settings/users');
|
||||
|
||||
andThen(function() {
|
||||
checkForCommonAsserts();
|
||||
findWithAssert('.user-list');
|
||||
let numberOfUsers = find('.user-list tr').length;
|
||||
assert.equal(numberOfUsers, 3, '2 Users listed');
|
||||
assert.equal(currentURL(), '/settings/users');
|
||||
});
|
||||
|
||||
fillIn('#newUserFirstname', 'Test');
|
||||
fillIn('#newUserLastname', 'User');
|
||||
fillIn('#newUserEmail', 'test.user@domain.com');
|
||||
click('.button-blue');
|
||||
|
||||
// waitToAppear('.user-notification:contains(Added)');
|
||||
// waitToDisappear('.user-notification:contains(Added)');
|
||||
|
||||
andThen(function() {
|
||||
let numberOfUsers = find('.user-list tr').length;
|
||||
assert.equal(numberOfUsers, 4, '3 Users listed');
|
||||
assert.equal(currentURL(), '/settings/users');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
function checkForCommonAsserts() {
|
||||
findWithAssert('.sidebar-menu');
|
||||
findWithAssert('#user-button');
|
||||
findWithAssert('#accounts-button');
|
||||
findWithAssert('a:contains(Dashboard)');
|
||||
findWithAssert('a:contains(Settings)');
|
||||
}
|
|
@ -6,18 +6,28 @@ export default function(name, options = {}) {
|
|||
module(name, {
|
||||
beforeEach() {
|
||||
this.application = startApp();
|
||||
stubAudit(this);
|
||||
stubSession(this);
|
||||
stubUserNotification(this);
|
||||
|
||||
if (options.beforeEach) {
|
||||
options.beforeEach.apply(this, arguments);
|
||||
}
|
||||
|
||||
this.register = (fullName, Factory) => {
|
||||
let instance = this.application.__deprecatedInstance__;
|
||||
let registry = instance.register ? instance : instance.registry;
|
||||
|
||||
return registry.register(fullName, Factory);
|
||||
};
|
||||
},
|
||||
|
||||
afterEach() {
|
||||
destroyApp(this.application);
|
||||
|
||||
if (options.afterEach) {
|
||||
options.afterEach.apply(this, arguments);
|
||||
}
|
||||
|
||||
destroyApp(this.application);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
import Ember from 'ember';
|
||||
import Application from '../../app';
|
||||
import config from '../../config/environment';
|
||||
import './stub-session';
|
||||
import './stub-audit';
|
||||
import './user-login';
|
||||
import './wait-to-appear';
|
||||
import './wait-to-disappear';
|
||||
import './stub-user-notification';
|
||||
|
||||
export default function startApp(attrs) {
|
||||
let application;
|
||||
|
|
70
app/tests/helpers/stub-audit.js
Normal file
70
app/tests/helpers/stub-audit.js
Normal file
|
@ -0,0 +1,70 @@
|
|||
import Ember from 'ember';
|
||||
// import netUtil from 'documize/utils/net';
|
||||
|
||||
const Audit = Ember.Service.extend({
|
||||
sessionService: Ember.inject.service('session'),
|
||||
ready: false,
|
||||
enabled: true,
|
||||
|
||||
init() {
|
||||
this.start();
|
||||
},
|
||||
|
||||
record(id) {
|
||||
if (!this.get('enabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.get('ready')) {
|
||||
this.start();
|
||||
}
|
||||
|
||||
return id;
|
||||
|
||||
// Intercom('trackEvent', id); //jshint ignore: line
|
||||
// Intercom('update'); //jshint ignore: line
|
||||
},
|
||||
|
||||
stop() {
|
||||
// Intercom('shutdown'); //jshint ignore: line
|
||||
},
|
||||
|
||||
start() {
|
||||
let session = this.get('sessionService');
|
||||
|
||||
if (!this.get('enabled') || !session.authenticated || this.get('ready')) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.set('ready', true);
|
||||
|
||||
// let appId = config.environment === 'production' ? 'c6cocn4z' : 'itgvb1vo';
|
||||
|
||||
// window.intercomSettings = {
|
||||
// app_id: appId,
|
||||
// name: session.user.firstname + " " + session.user.lastname,
|
||||
// email: session.user.email,
|
||||
// user_id: session.user.id,
|
||||
// "administrator": session.user.admin,
|
||||
// company:
|
||||
// {
|
||||
// id: session.get('appMeta.orgId'),
|
||||
// name: session.get('appMeta.title').string,
|
||||
// "domain": netUtil.getSubdomain(),
|
||||
// "version": session.get('appMeta.version')
|
||||
// }
|
||||
// };
|
||||
//
|
||||
// if (!session.get('isMobile')) {
|
||||
// window.intercomSettings.widget = {
|
||||
// activator: "#IntercomDefaultWidget"
|
||||
// };
|
||||
// }
|
||||
//
|
||||
// window.Intercom('boot', window.intercomSettings);
|
||||
},
|
||||
});
|
||||
|
||||
export default Ember.Test.registerAsyncHelper('stubAudit', function(app, test, attrs = {}) {
|
||||
test.register('service:audit', Audit.extend(attrs));
|
||||
});
|
200
app/tests/helpers/stub-session.js
Normal file
200
app/tests/helpers/stub-session.js
Normal file
|
@ -0,0 +1,200 @@
|
|||
import Ember from 'ember';
|
||||
import models from 'documize/utils/model';
|
||||
import encodingUtil from 'documize/utils/encoding';
|
||||
import netUtil from 'documize/utils/net';
|
||||
|
||||
const Session = Ember.Service.extend({
|
||||
|
||||
ready: false,
|
||||
appMeta: null,
|
||||
isMac: false,
|
||||
isMobile: false,
|
||||
previousTransition: null,
|
||||
user: null,
|
||||
authenticated: false,
|
||||
folderPermissions: null,
|
||||
currentFolder: null,
|
||||
ajax: Ember.inject.service(),
|
||||
|
||||
isAdmin: function() {
|
||||
if (this.authenticated && is.not.null(this.user) && this.user.id !== "") {
|
||||
return this.user.admin;
|
||||
}
|
||||
return false;
|
||||
}.property('user'),
|
||||
|
||||
isEditor: function() {
|
||||
if (this.authenticated && is.not.null(this.user) && this.user.id !== "") {
|
||||
return this.user.editor || this.user.admin;
|
||||
}
|
||||
return false;
|
||||
}.property('user'),
|
||||
|
||||
// Boot up
|
||||
init: function() {
|
||||
this.set('user', models.UserModel.create());
|
||||
this.appMeta = models.AppMeta.create();
|
||||
|
||||
this.set('isMac', is.mac());
|
||||
this.set('isMobile', is.mobile());
|
||||
},
|
||||
|
||||
login: function(credentials) {
|
||||
let url = this.appMeta.getUrl('public/authenticate');
|
||||
let domain = netUtil.getSubdomain();
|
||||
|
||||
this.clearSession();
|
||||
|
||||
if (is.empty(credentials.email) || is.empty(credentials.password)) {
|
||||
return Ember.RSVP.reject("invalid");
|
||||
}
|
||||
|
||||
var encoded = encodingUtil.Base64.encode(domain + ":" + credentials.email + ":" + credentials.password);
|
||||
var headers = {
|
||||
'Authorization': 'Basic ' + encoded
|
||||
};
|
||||
|
||||
return this.get('ajax').post(url, {
|
||||
headers
|
||||
}).then((response)=>{
|
||||
this.setSession(response.token, models.UserModel.create(response.user));
|
||||
this.get('ready', true);
|
||||
return response;
|
||||
});
|
||||
},
|
||||
|
||||
sso: function(credentials) {
|
||||
let url = this.appMeta.getUrl('public/authenticate');
|
||||
this.clearSession();
|
||||
|
||||
if (is.empty(credentials.email) || is.empty(credentials.password)) {
|
||||
return Ember.RSVP.reject("invalid");
|
||||
}
|
||||
|
||||
var headers = {
|
||||
'Authorization': 'Basic ' + credentials
|
||||
};
|
||||
|
||||
return this.get('ajax').post(url, {
|
||||
headers
|
||||
}).then((response)=>{
|
||||
this.setSession(response.token, models.UserModel.create(response.user));
|
||||
this.get('ready', true);
|
||||
return response;
|
||||
});
|
||||
},
|
||||
|
||||
// Goodbye
|
||||
logout: function() {
|
||||
this.clearSession();
|
||||
},
|
||||
|
||||
// Session management
|
||||
setSession: function(token, user) {
|
||||
this.set('user', user);
|
||||
this.set('authenticated', true);
|
||||
|
||||
this.storeSessionItem('token', token);
|
||||
this.storeSessionItem('user', JSON.stringify(user));
|
||||
|
||||
let self = this;
|
||||
|
||||
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
|
||||
// We only tack on auth header for Documize API calls
|
||||
if (is.startWith(options.url, self.get('appMeta.url'))) {
|
||||
jqXHR.setRequestHeader('Authorization', 'Bearer ' + token);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
clearSession: function() {
|
||||
this.set('user', null);
|
||||
this.set('authenticated', false);
|
||||
// localStorage.clear();
|
||||
},
|
||||
|
||||
storeSessionItem: function() {
|
||||
// localStorage[key] = data;
|
||||
// console.log(data);
|
||||
},
|
||||
|
||||
getSessionItem: function() {
|
||||
// return localStorage[key];
|
||||
// console.log(data);
|
||||
},
|
||||
|
||||
clearSessionItem: function() {
|
||||
// delete localStorage[key];
|
||||
},
|
||||
|
||||
boot() {
|
||||
let self = this;
|
||||
let dbhash = "";
|
||||
|
||||
if (is.not.null(document.head.querySelector("[property=dbhash]"))) {
|
||||
dbhash = document.head.querySelector("[property=dbhash]").content;
|
||||
}
|
||||
|
||||
if (dbhash.length > 0 && dbhash !== "{{.DBhash}}") {
|
||||
self.get('appMeta').set('orgId', "response.orgId");
|
||||
self.get('appMeta').setSafe('title', "Documize Setup");
|
||||
self.get('appMeta').set('version', "response.version");
|
||||
self.get('appMeta').setSafe('message', "response.message");
|
||||
self.get('appMeta').set('allowAnonymousAccess', false);
|
||||
self.set('ready', true);
|
||||
return new Ember.RSVP.Promise(function(resolve) {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
if (this.get('ready')) {
|
||||
return new Ember.RSVP.Promise(function(resolve) {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
// var blockedPopupTest = window.open("http://maintenance.documize.com", "directories=no,height=1,width=1,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,top=0,location=no");
|
||||
//
|
||||
// if (!blockedPopupTest) {
|
||||
// this.set('popupBlocked', true);
|
||||
// } else {
|
||||
// blockedPopupTest.close();
|
||||
// this.set('popupBlocked', false);
|
||||
// }
|
||||
|
||||
let url = this.get('appMeta').getUrl("public/meta");
|
||||
|
||||
return this.get('ajax').request(url)
|
||||
.then((response) => {
|
||||
this.get('appMeta').set('orgId', response.orgId);
|
||||
this.get('appMeta').setSafe('title', response.title);
|
||||
this.get('appMeta').set('version', response.version);
|
||||
this.get('appMeta').setSafe('message', response.message);
|
||||
this.get('appMeta').set('allowAnonymousAccess', response.allowAnonymousAccess);
|
||||
|
||||
let token = this.getSessionItem('token');
|
||||
|
||||
if (is.not.undefined(token)) {
|
||||
// We now validate current token
|
||||
let tokenCheckUrl = this.get('appMeta').getUrl(`public/validate?token=${token}`);
|
||||
|
||||
return this.get('ajax').request(tokenCheckUrl, {
|
||||
method: 'GET',
|
||||
contentType: 'json'
|
||||
}).then((user) => {
|
||||
this.setSession(token, models.UserModel.create(user));
|
||||
this.set('ready', true);
|
||||
}).catch((reason) => {
|
||||
if (reason.status === 401 || reason.status === 403) {
|
||||
// localStorage.clear();
|
||||
window.location.href = "/auth/login";
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
export default Ember.Test.registerAsyncHelper('stubSession', function(app, test, attrs={}) {
|
||||
test.register('service:session', Session.extend(attrs));
|
||||
});
|
22
app/tests/helpers/stub-user-notification.js
Normal file
22
app/tests/helpers/stub-user-notification.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
import Ember from 'ember';
|
||||
|
||||
const userNotification = Ember.Component.extend({
|
||||
notifications: [],
|
||||
|
||||
didInsertElement() {
|
||||
// this.eventBus.subscribe('notifyUser', this, 'notifyHandler');
|
||||
},
|
||||
|
||||
willDestroyElement() {
|
||||
// this.eventBus.unsubscribe('notifyUser');
|
||||
},
|
||||
|
||||
showNotification(msg) {
|
||||
return msg;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
export default Ember.Test.registerAsyncHelper('stubUserNotification', function(app, test, attrs={}) {
|
||||
test.register('component:userNotification', userNotification.extend(attrs));
|
||||
});
|
9
app/tests/helpers/user-login.js
Normal file
9
app/tests/helpers/user-login.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
import Ember from 'ember';
|
||||
|
||||
export default Ember.Test.registerAsyncHelper('userLogin', function() {
|
||||
visit('/auth/login');
|
||||
|
||||
fillIn('#authEmail', 'brizdigital@gmail.com');
|
||||
fillIn('#authPassword', 'zinyando123');
|
||||
click('button');
|
||||
});
|
21
app/tests/helpers/wait-to-appear.js
Normal file
21
app/tests/helpers/wait-to-appear.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
import Ember from 'ember';
|
||||
|
||||
function isVisible(selector) {
|
||||
return $(selector).length > 0;
|
||||
}
|
||||
|
||||
function checkVisibility(selector, interval, resolve, visibility) {
|
||||
if (isVisible(selector) === visibility) {
|
||||
resolve($(selector));
|
||||
} else {
|
||||
Ember.run.later(null, function() {
|
||||
checkVisibility(selector, interval, resolve, visibility);
|
||||
}, interval);
|
||||
}
|
||||
}
|
||||
|
||||
export default Ember.Test.registerAsyncHelper('waitToAppear', function(app, selector, interval = 200) {
|
||||
return new Ember.RSVP.Promise(function(resolve) {
|
||||
checkVisibility(selector, interval, resolve, true);
|
||||
});
|
||||
});
|
21
app/tests/helpers/wait-to-disappear.js
Normal file
21
app/tests/helpers/wait-to-disappear.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
import Ember from 'ember';
|
||||
|
||||
function isVisible(selector) {
|
||||
return $(selector).length > 0;
|
||||
}
|
||||
|
||||
function checkVisibility(selector, interval, resolve, visibility) {
|
||||
if (isVisible(selector) === visibility) {
|
||||
resolve($(selector));
|
||||
} else {
|
||||
Ember.run.later(null, function() {
|
||||
checkVisibility(selector, interval, resolve, visibility);
|
||||
}, interval);
|
||||
}
|
||||
}
|
||||
|
||||
export default Ember.Test.registerAsyncHelper('waitToDisappear', function(app, selector, interval = 200) {
|
||||
return new Ember.RSVP.Promise(function(resolve) {
|
||||
checkVisibility(selector, interval, resolve, false);
|
||||
});
|
||||
});
|
|
@ -6,15 +6,25 @@
|
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>Documize Tests</title>
|
||||
<meta name="description" content="">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"> {{content-for "head"}} {{content-for "test-head"}}
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta property="dbname" content="{{.DBname}}" />
|
||||
<meta property="dbhash" content="{{.DBhash}}" />
|
||||
<meta name="author" content="Documize" />
|
||||
|
||||
{{content-for "head"}}
|
||||
{{content-for "test-head"}}
|
||||
|
||||
<link rel="stylesheet" href="assets/vendor.css">
|
||||
<link rel="stylesheet" href="assets/documize.css">
|
||||
<link rel="stylesheet" href="assets/test-support.css" /> {{content-for "head-footer"}} {{content-for "test-head-footer"}}
|
||||
<link rel="stylesheet" href="assets/test-support.css" />
|
||||
|
||||
{{content-for "head-footer"}}
|
||||
{{content-for "test-head-footer"}}
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{{content-for "body"}} {{content-for "test-body"}}
|
||||
{{content-for "body"}}
|
||||
{{content-for "test-body"}}
|
||||
|
||||
<script src="testem.js" integrity=""></script>
|
||||
<script src="assets/vendor.js"></script>
|
||||
|
@ -23,7 +33,8 @@
|
|||
<script src="assets/tests.js"></script>
|
||||
<script src="assets/test-loader.js"></script>
|
||||
|
||||
{{content-for "body-footer"}} {{content-for "test-body-footer"}}
|
||||
{{content-for "body-footer"}}
|
||||
{{content-for "test-body-footer"}}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
import { moduleForComponent, test } from 'ember-qunit';
|
||||
import hbs from 'htmlbars-inline-precompile';
|
||||
|
||||
moduleForComponent('section/gemini/type-editor', 'Integration | Component | section/gemini/type editor', {
|
||||
integration: true
|
||||
});
|
||||
|
||||
test('it renders', function(assert) {
|
||||
// Set any properties with this.set('myProperty', 'value');
|
||||
// Handle any actions with this.on('myAction', function(val) { ... });
|
||||
|
||||
this.render(hbs`{{section/gemini/type-editor}}`);
|
||||
|
||||
assert.equal(this.$().text().trim(), '');
|
||||
|
||||
// Template block usage:
|
||||
this.render(hbs`
|
||||
{{#section/gemini/type-editor}}
|
||||
template block text
|
||||
{{/section/gemini/type-editor}}
|
||||
`);
|
||||
|
||||
assert.equal(this.$().text().trim(), 'template block text');
|
||||
});
|
|
@ -1,24 +0,0 @@
|
|||
import { moduleForComponent, test } from 'ember-qunit';
|
||||
import hbs from 'htmlbars-inline-precompile';
|
||||
|
||||
moduleForComponent('section/gemini/type-renderer', 'Integration | Component | section/gemini/type renderer', {
|
||||
integration: true
|
||||
});
|
||||
|
||||
test('it renders', function(assert) {
|
||||
// Set any properties with this.set('myProperty', 'value');
|
||||
// Handle any actions with this.on('myAction', function(val) { ... });
|
||||
|
||||
this.render(hbs`{{section/gemini/type-renderer}}`);
|
||||
|
||||
assert.equal(this.$().text().trim(), '');
|
||||
|
||||
// Template block usage:
|
||||
this.render(hbs`
|
||||
{{#section/gemini/type-renderer}}
|
||||
template block text
|
||||
{{/section/gemini/type-renderer}}
|
||||
`);
|
||||
|
||||
assert.equal(this.$().text().trim(), 'template block text');
|
||||
});
|
|
@ -1,14 +0,0 @@
|
|||
import { documentFileIcon } from '../../../../helpers/document/file-icon';
|
||||
import { module, test } from 'qunit';
|
||||
|
||||
module('Unit | Helper | document/file icon');
|
||||
|
||||
test('should be file icon of ZIP', function(assert) {
|
||||
let result = documentFileIcon(["zIp"]);
|
||||
assert.equal(result, "zip.png");
|
||||
});
|
||||
|
||||
test('should be file icon of ZIP (tar)', function(assert) {
|
||||
let result = documentFileIcon(["TAR"]);
|
||||
assert.equal(result, "zip.png");
|
||||
});
|
|
@ -1,19 +0,0 @@
|
|||
import {
|
||||
documentTocEntry
|
||||
} from '../../../../helpers/document/toc-entry';
|
||||
import {
|
||||
module,
|
||||
test
|
||||
} from 'qunit';
|
||||
|
||||
module('Unit | Helper | document/toc entry');
|
||||
|
||||
test('toc entry should be not indented and not selected', function(assert) {
|
||||
let result = documentTocEntry(['node-123', 'node-321', 1]);
|
||||
assert.equal(result.toString(), "<span style='margin-left: 0px;'></span><span class=''></span>");
|
||||
});
|
||||
|
||||
test('toc entry should be indented and selected', function(assert) {
|
||||
let result = documentTocEntry(['node-123', 'node-123', 2]);
|
||||
assert.equal(result.toString(), "<span style='margin-left: 20px;'></span><span class='selected'></span>");
|
||||
});
|
|
@ -1,9 +0,0 @@
|
|||
import { formattedDate } from '../../../helpers/formatted-date';
|
||||
import { module, test } from 'qunit';
|
||||
|
||||
module('Unit | Helper | formatted date');
|
||||
|
||||
test('should format date', function(assert) {
|
||||
let result = formattedDate([new Date("1995-12-17T20:18:00"), "Do MMMM YYYY, HH:mm"]);
|
||||
assert.equal(result, "17th December 1995, 20:18");
|
||||
});
|
|
@ -1,9 +0,0 @@
|
|||
import { timeAgo } from '../../../helpers/time-ago';
|
||||
import { module, test } from 'qunit';
|
||||
|
||||
module('Unit | Helper | time ago');
|
||||
|
||||
test('should format date as time ago', function(assert) {
|
||||
let result = timeAgo([new Date()]);
|
||||
assert.equal(result, "a few seconds ago");
|
||||
});
|
|
@ -1,9 +0,0 @@
|
|||
import { userInitials } from '../../../helpers/user-initials';
|
||||
import { module, test } from 'qunit';
|
||||
|
||||
module('Unit | Helper | user initials');
|
||||
|
||||
test('should uppercase initials from firstname lastname', function(assert) {
|
||||
let result = userInitials(["Some", "name"]);
|
||||
assert.equal(result, "SN");
|
||||
});
|
|
@ -1,22 +0,0 @@
|
|||
import Ember from 'ember';
|
||||
import AuditInitializer from '../../../initializers/audit';
|
||||
import { module, test } from 'qunit';
|
||||
|
||||
let application;
|
||||
|
||||
module('Unit | Initializer | audit', {
|
||||
beforeEach() {
|
||||
Ember.run(function() {
|
||||
application = Ember.Application.create();
|
||||
application.deferReadiness();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Replace this with your real tests.
|
||||
test('it works', function(assert) {
|
||||
AuditInitializer.initialize(application);
|
||||
|
||||
// you would normally confirm the results of the initializer here
|
||||
assert.ok(true);
|
||||
});
|
|
@ -1,12 +0,0 @@
|
|||
import Ember from 'ember';
|
||||
import NotifierMixin from '../../../mixins/notifier';
|
||||
import { module, test } from 'qunit';
|
||||
|
||||
module('Unit | Mixin | notifier');
|
||||
|
||||
// Replace this with your real tests.
|
||||
test('it works', function(assert) {
|
||||
let NotifierObject = Ember.Object.extend(NotifierMixin);
|
||||
let subject = NotifierObject.create();
|
||||
assert.ok(subject);
|
||||
});
|
|
@ -1,12 +0,0 @@
|
|||
import Ember from 'ember';
|
||||
import TooltipMixin from '../../../mixins/tooltip';
|
||||
import { module, test } from 'qunit';
|
||||
|
||||
module('Unit | Mixin | tooltip');
|
||||
|
||||
// Replace this with your real tests.
|
||||
test('it works', function(assert) {
|
||||
let TooltipObject = Ember.Object.extend(TooltipMixin);
|
||||
let subject = TooltipObject.create();
|
||||
assert.ok(subject);
|
||||
});
|
|
@ -1,11 +0,0 @@
|
|||
import { moduleFor, test } from 'ember-qunit';
|
||||
|
||||
moduleFor('route:document/wizard', 'Unit | Route | document/wizard', {
|
||||
// Specify the other units that are required for this test.
|
||||
// needs: ['controller:foo']
|
||||
});
|
||||
|
||||
test('it exists', function(assert) {
|
||||
let route = this.subject();
|
||||
assert.ok(route);
|
||||
});
|
|
@ -1,11 +0,0 @@
|
|||
import { moduleFor, test } from 'ember-qunit';
|
||||
|
||||
moduleFor('route:document/wizard', 'Unit | Route | document/wizard', {
|
||||
// Specify the other units that are required for this test.
|
||||
// needs: ['controller:foo']
|
||||
});
|
||||
|
||||
test('it exists', function(assert) {
|
||||
let route = this.subject();
|
||||
assert.ok(route);
|
||||
});
|
|
@ -1,12 +0,0 @@
|
|||
import { moduleFor, test } from 'ember-qunit';
|
||||
|
||||
moduleFor('service:section', 'Unit | Service | section', {
|
||||
// Specify the other units that are required for this test.
|
||||
// needs: ['service:foo']
|
||||
});
|
||||
|
||||
// Replace this with your real tests.
|
||||
test('it exists', function(assert) {
|
||||
let service = this.subject();
|
||||
assert.ok(service);
|
||||
});
|
|
@ -1,33 +0,0 @@
|
|||
import dateUtil from '../../../utils/date';
|
||||
import { module, test } from 'qunit';
|
||||
|
||||
module('Unit | Utility | date helpers');
|
||||
|
||||
test("should calculate time ago of a few seconds", function(assert) {
|
||||
let result = dateUtil.timeAgo(new Date());
|
||||
assert.equal(result, "a few seconds ago");
|
||||
});
|
||||
|
||||
test("should calculate time ago of a day", function(assert) {
|
||||
var temp = new Date();
|
||||
temp.setDate(temp.getDate()-1);
|
||||
let result = dateUtil.timeAgo(temp);
|
||||
assert.equal(result, "a day ago");
|
||||
});
|
||||
|
||||
test("should calculate time ago of 2 days", function(assert) {
|
||||
var temp = new Date();
|
||||
temp.setDate(temp.getDate()-2);
|
||||
let result = dateUtil.timeAgo(temp);
|
||||
assert.equal(result, "2 days ago");
|
||||
});
|
||||
|
||||
test("should handle ISO date", function(assert) {
|
||||
let result = dateUtil.toIsoDate(new Date("1995, 12, 17"));
|
||||
assert.equal(result, "1995-12-17T00:00:00+00:00");
|
||||
});
|
||||
|
||||
test("should format short date", function(assert) {
|
||||
let result = dateUtil.toShortDate(new Date("1995, 12, 17"));
|
||||
assert.equal(result, "1995/12/17");
|
||||
});
|
|
@ -1,9 +0,0 @@
|
|||
import encodingUtil from '../../../utils/encoding';
|
||||
import { module, test } from 'qunit';
|
||||
|
||||
module('Unit | Utility | encoding helpers');
|
||||
|
||||
test("should correctly Base64 encode", function(assert) {
|
||||
let result = encodingUtil.Base64.encode("test");
|
||||
assert.equal(result, "dGVzdA==");
|
||||
});
|
|
@ -1,14 +0,0 @@
|
|||
import stringUtil from '../../../utils/string';
|
||||
import { module, test } from 'qunit';
|
||||
|
||||
module('Unit | Utility | string');
|
||||
|
||||
test("should find string suffix", function(assert) {
|
||||
let result = stringUtil.endsWith("some words", "words");
|
||||
assert.ok(result);
|
||||
});
|
||||
|
||||
test("should generate slug", function(assert) {
|
||||
let result = stringUtil.makeSlug("something to slug");
|
||||
assert.equal(result, "something-to-slug");
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue