2019-08-09 09:38:02 +02:00
|
|
|
import Session from 'common/session';
|
2020-01-23 07:39:04 +01:00
|
|
|
import Config from 'common/config'
|
2019-08-12 10:26:26 +02:00
|
|
|
import MockAdapter from "axios-mock-adapter";
|
|
|
|
import Api from "common/api";
|
|
|
|
|
2020-06-29 11:16:11 +02:00
|
|
|
//TODO Add tokens to config data and test hasToken
|
2020-06-25 01:20:58 +02:00
|
|
|
window.__CONFIG__ = {
|
|
|
|
"name": "PhotoPrism",
|
|
|
|
"version": "200531-4684f66-Linux-x86_64-DEBUG",
|
|
|
|
"copyright": "(c) 2018-2020 PhotoPrism.org \u003chello@photoprism.org\u003e",
|
|
|
|
"flags": "public debug experimental settings",
|
|
|
|
"siteUrl": "http://localhost:2342/",
|
|
|
|
"siteTitle": "PhotoPrism",
|
|
|
|
"siteCaption": "Browse your life",
|
|
|
|
"siteDescription": "Personal Photo Management powered by Go and Google TensorFlow. Free and open-source.",
|
|
|
|
"siteAuthor": "Anonymous",
|
|
|
|
"debug": true,
|
|
|
|
"readonly": false,
|
|
|
|
"uploadNSFW": false,
|
|
|
|
"public": true,
|
|
|
|
"experimental": true,
|
|
|
|
"disableSettings": false,
|
|
|
|
"albumCategories": null,
|
|
|
|
"albums": [],
|
|
|
|
"cameras": [{
|
|
|
|
"ID": 2,
|
|
|
|
"Slug": "olympus-c2500l",
|
|
|
|
"Name": "Olympus C2500L",
|
|
|
|
"Make": "Olympus",
|
|
|
|
"Model": "C2500L"
|
|
|
|
}, {"ID": 1, "Slug": "zz", "Name": "Unknown", "Make": "", "Model": "Unknown"}],
|
|
|
|
"lenses": [{"ID": 1, "Slug": "zz", "Name": "Unknown", "Make": "", "Model": "Unknown", "Type": ""}],
|
|
|
|
"countries": [{"ID": "de", "Slug": "germany", "Name": "Germany"}, {
|
|
|
|
"ID": "is",
|
|
|
|
"Slug": "iceland",
|
|
|
|
"Name": "Iceland"
|
|
|
|
}, {"ID": "zz", "Slug": "zz", "Name": "Unknown"}],
|
|
|
|
"thumbnails": [{"Name": "fit_720", "Width": 720, "Height": 720}, {
|
|
|
|
"Name": "fit_2048",
|
|
|
|
"Width": 2048,
|
|
|
|
"Height": 2048
|
|
|
|
}, {"Name": "fit_1280", "Width": 1280, "Height": 1024}, {
|
|
|
|
"Name": "fit_1920",
|
|
|
|
"Width": 1920,
|
|
|
|
"Height": 1200
|
|
|
|
}, {"Name": "fit_2560", "Width": 2560, "Height": 1600}, {"Name": "fit_3840", "Width": 3840, "Height": 2400}],
|
|
|
|
"downloadToken": "1uhovi0e",
|
|
|
|
"previewToken": "static",
|
|
|
|
"jsHash": "0fd34136",
|
|
|
|
"cssHash": "2b327230",
|
|
|
|
"settings": {
|
|
|
|
"theme": "default",
|
|
|
|
"language": "en",
|
|
|
|
"templates": {"default": "index.tmpl"},
|
|
|
|
"maps": {"animate": 0, "style": "streets"},
|
|
|
|
"features": {
|
|
|
|
"archive": true,
|
|
|
|
"private": true,
|
|
|
|
"review": true,
|
|
|
|
"upload": true,
|
|
|
|
"import": true,
|
|
|
|
"files": true,
|
|
|
|
"moments": true,
|
|
|
|
"labels": true,
|
|
|
|
"places": true,
|
|
|
|
"download": true,
|
|
|
|
"edit": true,
|
|
|
|
"share": true,
|
|
|
|
"logs": true
|
|
|
|
},
|
|
|
|
"import": {"path": "/", "move": false},
|
|
|
|
"index": {"path": "/", "convert": true, "rescan": false, "group": true}
|
|
|
|
},
|
|
|
|
"count": {
|
|
|
|
"cameras": 1,
|
|
|
|
"lenses": 0,
|
|
|
|
"countries": 2,
|
|
|
|
"photos": 126,
|
|
|
|
"videos": 0,
|
|
|
|
"hidden": 3,
|
|
|
|
"favorites": 1,
|
|
|
|
"private": 0,
|
|
|
|
"review": 0,
|
|
|
|
"stories": 0,
|
|
|
|
"albums": 0,
|
|
|
|
"moments": 0,
|
|
|
|
"months": 0,
|
|
|
|
"folders": 0,
|
|
|
|
"files": 255,
|
|
|
|
"places": 0,
|
|
|
|
"labels": 13,
|
|
|
|
"labelMaxPhotos": 1
|
|
|
|
},
|
|
|
|
"pos": {"uid": "", "loc": "", "utc": "0001-01-01T00:00:00Z", "lat": 0, "lng": 0},
|
|
|
|
"years": [2003, 2002],
|
|
|
|
"colors": [{"Example": "#AB47BC", "Name": "Purple", "Slug": "purple"}, {
|
|
|
|
"Example": "#FF00FF",
|
|
|
|
"Name": "Magenta",
|
|
|
|
"Slug": "magenta"
|
|
|
|
}, {"Example": "#EC407A", "Name": "Pink", "Slug": "pink"}, {
|
|
|
|
"Example": "#EF5350",
|
|
|
|
"Name": "Red",
|
|
|
|
"Slug": "red"
|
|
|
|
}, {"Example": "#FFA726", "Name": "Orange", "Slug": "orange"}, {
|
|
|
|
"Example": "#D4AF37",
|
|
|
|
"Name": "Gold",
|
|
|
|
"Slug": "gold"
|
|
|
|
}, {"Example": "#FDD835", "Name": "Yellow", "Slug": "yellow"}, {
|
|
|
|
"Example": "#CDDC39",
|
|
|
|
"Name": "Lime",
|
|
|
|
"Slug": "lime"
|
|
|
|
}, {"Example": "#66BB6A", "Name": "Green", "Slug": "green"}, {
|
|
|
|
"Example": "#009688",
|
|
|
|
"Name": "Teal",
|
|
|
|
"Slug": "teal"
|
|
|
|
}, {"Example": "#00BCD4", "Name": "Cyan", "Slug": "cyan"}, {
|
|
|
|
"Example": "#2196F3",
|
|
|
|
"Name": "Blue",
|
|
|
|
"Slug": "blue"
|
|
|
|
}, {"Example": "#A1887F", "Name": "Brown", "Slug": "brown"}, {
|
|
|
|
"Example": "#F5F5F5",
|
|
|
|
"Name": "White",
|
|
|
|
"Slug": "white"
|
|
|
|
}, {"Example": "#9E9E9E", "Name": "Grey", "Slug": "grey"}, {
|
|
|
|
"Example": "#212121",
|
|
|
|
"Name": "Black",
|
|
|
|
"Slug": "black"
|
|
|
|
}],
|
|
|
|
"categories": [{"UID": "lqb6y631re96cper", "Slug": "animal", "Name": "Animal"}, {
|
|
|
|
"UID": "lqb6y5gvo9avdfx5",
|
|
|
|
"Slug": "architecture",
|
|
|
|
"Name": "Architecture"
|
|
|
|
}, {"UID": "lqb6y633nhfj1uzt", "Slug": "bird", "Name": "Bird"}, {
|
|
|
|
"UID": "lqb6y633g3hxg1aq",
|
|
|
|
"Slug": "farm",
|
|
|
|
"Name": "Farm"
|
|
|
|
}, {"UID": "lqb6y4i1ez9cw5bi", "Slug": "nature", "Name": "Nature"}, {
|
|
|
|
"UID": "lqb6y4f2v7dw8irs",
|
|
|
|
"Slug": "plant",
|
|
|
|
"Name": "Plant"
|
|
|
|
}, {"UID": "lqb6y6s2ohhmu0fn", "Slug": "reptile", "Name": "Reptile"}, {
|
|
|
|
"UID": "lqb6y6ctgsq2g2np",
|
|
|
|
"Slug": "water",
|
|
|
|
"Name": "Water"
|
|
|
|
}],
|
|
|
|
"clip": 160,
|
|
|
|
"server": {
|
|
|
|
"cores": 2,
|
|
|
|
"routines": 23,
|
|
|
|
"memory": {"used": 1224531272, "reserved": 1416904088, "info": "Used 1.2 GB / Reserved 1.4 GB"}
|
|
|
|
}
|
|
|
|
};
|
2020-01-23 07:39:04 +01:00
|
|
|
|
2019-08-13 08:10:51 +02:00
|
|
|
let chai = require('../../../node_modules/chai/chai');
|
|
|
|
let assert = chai.assert;
|
2020-05-23 20:58:58 +02:00
|
|
|
const config = new Config(window.localStorage, window.__CONFIG__);
|
2020-01-22 17:07:50 +01:00
|
|
|
|
2019-08-12 13:00:41 +02:00
|
|
|
describe('common/session', () => {
|
2019-08-12 10:26:26 +02:00
|
|
|
|
2019-08-12 13:00:41 +02:00
|
|
|
const mock = new MockAdapter(Api);
|
2019-08-09 09:38:02 +02:00
|
|
|
|
2019-08-12 10:26:26 +02:00
|
|
|
beforeEach(() => {
|
|
|
|
window.onbeforeunload = () => 'Oh no!';
|
|
|
|
});
|
|
|
|
|
2020-06-25 01:20:58 +02:00
|
|
|
it('should construct session', () => {
|
2019-08-09 09:38:02 +02:00
|
|
|
const storage = window.localStorage;
|
2020-01-23 07:39:04 +01:00
|
|
|
const session = new Session(storage, config);
|
2020-06-25 14:54:04 +02:00
|
|
|
assert.equal(session.session_id, null);
|
2019-08-09 09:38:02 +02:00
|
|
|
});
|
|
|
|
|
2020-06-25 01:20:58 +02:00
|
|
|
it('should set, get and delete token', () => {
|
2019-08-09 09:38:02 +02:00
|
|
|
const storage = window.localStorage;
|
2020-01-23 07:39:04 +01:00
|
|
|
const session = new Session(storage, config);
|
2020-06-29 11:16:11 +02:00
|
|
|
assert.equal(session.hasToken("1uhovi0e"), false);
|
2020-06-25 14:54:04 +02:00
|
|
|
assert.equal(session.session_id, null);
|
|
|
|
session.setId(123421);
|
|
|
|
assert.equal(session.session_id, 123421);
|
|
|
|
const result = session.getId();
|
2019-08-09 09:38:02 +02:00
|
|
|
assert.equal(result, 123421);
|
2020-06-25 14:54:04 +02:00
|
|
|
session.deleteId();
|
|
|
|
assert.equal(session.session_id, null);
|
2019-08-09 09:38:02 +02:00
|
|
|
});
|
|
|
|
|
2020-06-25 01:20:58 +02:00
|
|
|
it('should set, get and delete user', () => {
|
2019-08-09 09:38:02 +02:00
|
|
|
const storage = window.localStorage;
|
2020-01-23 07:39:04 +01:00
|
|
|
const session = new Session(storage, config);
|
2020-06-25 01:20:58 +02:00
|
|
|
assert.isFalse(session.user.hasId());
|
|
|
|
const values = {"user": {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Admin: true}};
|
2020-06-29 11:16:11 +02:00
|
|
|
session.setData();
|
|
|
|
assert.equal(session.user.FirstName, "");
|
2020-06-25 01:20:58 +02:00
|
|
|
session.setData(values);
|
2019-11-08 06:53:40 +01:00
|
|
|
assert.equal(session.user.FirstName, "Max");
|
2020-06-25 01:20:58 +02:00
|
|
|
assert.equal(session.user.Admin, true);
|
2019-08-09 10:12:48 +02:00
|
|
|
const result = session.getUser();
|
|
|
|
assert.equal(result.ID, 5);
|
2019-11-08 06:53:40 +01:00
|
|
|
assert.equal(result.Email, "test@test.com");
|
2020-06-25 01:20:58 +02:00
|
|
|
session.deleteData();
|
|
|
|
assert.isFalse(session.user.hasId());
|
2019-08-09 10:12:48 +02:00
|
|
|
});
|
|
|
|
|
2020-06-25 01:20:58 +02:00
|
|
|
it('should get user email', () => {
|
2019-08-09 10:12:48 +02:00
|
|
|
const storage = window.localStorage;
|
2020-01-23 07:39:04 +01:00
|
|
|
const session = new Session(storage, config);
|
2020-06-25 01:20:58 +02:00
|
|
|
const values = {"user": {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Admin: true}};
|
|
|
|
session.setData(values);
|
2019-08-09 10:12:48 +02:00
|
|
|
const result = session.getEmail();
|
|
|
|
assert.equal(result, "test@test.com");
|
2020-06-25 01:20:58 +02:00
|
|
|
const values2 = {"user": {FirstName: "Max", LastName: "Last", Email: "test@test.com", Admin: true}};
|
|
|
|
session.setData(values2);
|
2019-08-09 10:12:48 +02:00
|
|
|
const result2 = session.getEmail();
|
|
|
|
assert.equal(result2, "");
|
2020-06-25 01:20:58 +02:00
|
|
|
session.deleteData();
|
2019-08-09 10:12:48 +02:00
|
|
|
});
|
|
|
|
|
2020-06-25 01:20:58 +02:00
|
|
|
it('should get user firstname', () => {
|
2019-08-09 10:12:48 +02:00
|
|
|
const storage = window.localStorage;
|
2020-01-23 07:39:04 +01:00
|
|
|
const session = new Session(storage, config);
|
2020-06-25 01:20:58 +02:00
|
|
|
const values = {"user": {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Admin: true}};
|
|
|
|
session.setData(values);
|
2019-08-09 10:12:48 +02:00
|
|
|
const result = session.getFirstName();
|
|
|
|
assert.equal(result, "Max");
|
2020-06-25 01:20:58 +02:00
|
|
|
const values2 = {"user": {FirstName: "Max", LastName: "Last", Email: "test@test.com", Admin: true}};
|
|
|
|
session.setData(values2);
|
2019-08-09 10:12:48 +02:00
|
|
|
const result2 = session.getFirstName();
|
|
|
|
assert.equal(result2, "");
|
2020-06-25 01:20:58 +02:00
|
|
|
session.deleteData();
|
2019-08-09 10:12:48 +02:00
|
|
|
});
|
|
|
|
|
2020-06-25 01:20:58 +02:00
|
|
|
it('should get user full name', () => {
|
2019-08-09 10:12:48 +02:00
|
|
|
const storage = window.localStorage;
|
2020-01-23 07:39:04 +01:00
|
|
|
const session = new Session(storage, config);
|
2020-06-25 01:20:58 +02:00
|
|
|
const values = {"user": {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Admin: true}};
|
|
|
|
session.setData(values);
|
2019-08-09 10:12:48 +02:00
|
|
|
const result = session.getFullName();
|
|
|
|
assert.equal(result, "Max Last");
|
2020-06-25 01:20:58 +02:00
|
|
|
const values2 = {"user": {FirstName: "Max", LastName: "Last", Email: "test@test.com", Admin: true}};
|
|
|
|
session.setData(values2);
|
2019-08-09 10:12:48 +02:00
|
|
|
const result2 = session.getFullName();
|
|
|
|
assert.equal(result2, "");
|
2020-06-25 01:20:58 +02:00
|
|
|
session.deleteData();
|
2019-08-09 09:38:02 +02:00
|
|
|
});
|
2019-08-09 10:12:48 +02:00
|
|
|
|
2020-06-25 01:20:58 +02:00
|
|
|
it('should test whether user is set', () => {
|
2019-08-09 10:12:48 +02:00
|
|
|
const storage = window.localStorage;
|
2020-01-23 07:39:04 +01:00
|
|
|
const session = new Session(storage, config);
|
2020-06-25 01:20:58 +02:00
|
|
|
const values = {"user": {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Admin: true}};
|
|
|
|
session.setData(values);
|
2019-08-09 10:12:48 +02:00
|
|
|
const result = session.isUser();
|
|
|
|
assert.equal(result, true);
|
2020-06-25 01:20:58 +02:00
|
|
|
session.deleteData();
|
2019-08-09 10:12:48 +02:00
|
|
|
});
|
|
|
|
|
2020-06-25 01:20:58 +02:00
|
|
|
it('should test whether user is admin', () => {
|
2019-08-09 10:12:48 +02:00
|
|
|
const storage = window.localStorage;
|
2020-01-23 07:39:04 +01:00
|
|
|
const session = new Session(storage, config);
|
2020-06-25 01:20:58 +02:00
|
|
|
const values = {"user": {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Admin: true}};
|
|
|
|
session.setData(values);
|
2019-08-09 10:12:48 +02:00
|
|
|
const result = session.isAdmin();
|
|
|
|
assert.equal(result, true);
|
2020-06-25 01:20:58 +02:00
|
|
|
session.deleteData();
|
2019-08-09 10:12:48 +02:00
|
|
|
});
|
|
|
|
|
2020-06-25 01:20:58 +02:00
|
|
|
it('should test whether user is anonymous', () => {
|
2019-08-09 10:12:48 +02:00
|
|
|
const storage = window.localStorage;
|
2020-01-23 07:39:04 +01:00
|
|
|
const session = new Session(storage, config);
|
2020-06-25 01:20:58 +02:00
|
|
|
const values = {"user": {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Admin: true}};
|
|
|
|
session.setData(values);
|
2019-08-09 10:12:48 +02:00
|
|
|
const result = session.isAnonymous();
|
|
|
|
assert.equal(result, false);
|
2020-06-25 01:20:58 +02:00
|
|
|
session.deleteData();
|
2019-08-09 10:12:48 +02:00
|
|
|
});
|
|
|
|
|
2020-06-25 01:20:58 +02:00
|
|
|
it('should test login and logout', async () => {
|
2019-08-12 13:00:41 +02:00
|
|
|
mock
|
2020-06-25 14:54:04 +02:00
|
|
|
.onPost("session").reply(200, {id: "8877", data: {user: {ID: 1, Email: "test@test.com"}}})
|
2019-08-12 13:00:41 +02:00
|
|
|
.onDelete("session/8877").reply(200);
|
2019-08-12 10:26:26 +02:00
|
|
|
const storage = window.localStorage;
|
2020-01-23 07:39:04 +01:00
|
|
|
const session = new Session(storage, config);
|
2020-06-25 14:54:04 +02:00
|
|
|
assert.equal(session.session_id, null);
|
2020-06-25 01:20:58 +02:00
|
|
|
assert.equal(session.storage.data, undefined);
|
2019-08-12 10:26:26 +02:00
|
|
|
await session.login("test@test.com", "passwd");
|
2020-06-25 14:54:04 +02:00
|
|
|
assert.equal(session.session_id, 8877);
|
2020-06-25 01:20:58 +02:00
|
|
|
assert.equal(session.storage.data, '{"user":{"ID":1,"Email":"test@test.com"}}');
|
2019-08-12 10:26:26 +02:00
|
|
|
await session.logout();
|
2020-06-25 14:54:04 +02:00
|
|
|
assert.equal(session.session_id, null);
|
2019-08-12 13:00:41 +02:00
|
|
|
mock.reset();
|
2019-08-12 10:26:26 +02:00
|
|
|
});
|
2019-08-09 10:12:48 +02:00
|
|
|
|
2020-06-29 11:16:11 +02:00
|
|
|
it('should use session storage', () => {
|
|
|
|
const storage = window.sessionStorage;
|
|
|
|
const session = new Session(storage, config);
|
|
|
|
assert.equal(storage.getItem("session_storage"), null);
|
|
|
|
session.useSessionStorage();
|
|
|
|
assert.equal(storage.getItem("session_storage"), "true");
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should use local storage', () => {
|
|
|
|
const storage = window.localStorage;
|
|
|
|
const session = new Session(storage, config);
|
|
|
|
assert.equal(storage.getItem("session_storage"), null);
|
|
|
|
session.useLocalStorage();
|
|
|
|
assert.equal(storage.getItem("session_storage"), "false");
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should test redeem token', async () => {
|
|
|
|
mock
|
|
|
|
.onPost("session").reply(200, {id: "123", data: {token: "123token"}});
|
|
|
|
const storage = window.localStorage;
|
|
|
|
const session = new Session(storage, config);
|
|
|
|
assert.equal(session.data, null);
|
|
|
|
await session.redeemToken("token123");
|
|
|
|
assert.equal(session.data.token, "123token");
|
|
|
|
mock.reset();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should test onLogout', async () => {
|
|
|
|
mock
|
|
|
|
.onPost("session").reply(200, {id: "8877", data: {user: {ID: 1, Email: "test@test.com"}}})
|
|
|
|
.onDelete("session/8877").reply(200);
|
|
|
|
const storage = window.localStorage;
|
|
|
|
const session = new Session(storage, config);
|
|
|
|
assert.equal(session.session_id, null);
|
|
|
|
assert.equal(session.storage.data, undefined);
|
|
|
|
await session.login("test@test.com", "passwd");
|
|
|
|
assert.equal(session.session_id, 8877);
|
|
|
|
assert.equal(session.storage.data, '{"user":{"ID":1,"Email":"test@test.com"}}');
|
|
|
|
await session.onLogout();
|
|
|
|
assert.equal(session.session_id, null);
|
|
|
|
mock.reset();
|
|
|
|
});
|
2019-11-08 06:53:40 +01:00
|
|
|
});
|