photoprism/frontend/tests/unit/common/session_test.js

153 lines
16 KiB
JavaScript
Raw Normal View History

2019-08-09 07:38:02 +00:00
import Session from 'common/session';
import Config from 'common/config'
2019-08-09 08:12:48 +00:00
import User from 'model/user';
2019-08-12 08:26:26 +00:00
import MockAdapter from "axios-mock-adapter";
import Api from "common/api";
window.clientConfig = {"albums":[{"ID":1,"CoverUUID":"","AlbumUUID":"aq4gs3w2x9r0m7ppx","AlbumSlug":"cat-power","AlbumName":"Cat Power","AlbumDescription":"","AlbumNotes":"","AlbumViews":0,"AlbumFavorite":true,"AlbumPublic":false,"AlbumLat":0,"AlbumLng":0,"AlbumRadius":0,"AlbumOrder":"","AlbumTemplate":"","CreatedAt":"2020-01-21T15:52:45Z","UpdatedAt":"2020-01-21T15:52:45Z","DeletedAt":null}],"author":"PhotoPrism.org","cameras":[{"ID":60009,"CameraSlug":"neingrenze-5000t","CameraModel":"5000T","CameraMake":"NEINGRENZE","CameraType":"","CameraOwner":"","CameraDescription":"","CameraNotes":"","CreatedAt":"2020-01-15T17:26:05Z","UpdatedAt":"2020-01-15T17:26:05Z","DeletedAt":null},{"ID":60007,"CameraSlug":"olympus-optical-co-ltd-c2500l","CameraModel":"C2500L ","CameraMake":"OLYMPUS OPTICAL CO.,LTD","CameraType":"","CameraOwner":"","CameraDescription":"","CameraNotes":"","CreatedAt":"2020-01-15T17:25:33Z","UpdatedAt":"2020-01-15T17:27:51Z","DeletedAt":null},{"ID":60004,"CameraSlug":"canon-eos-10d","CameraModel":"EOS 10D","CameraMake":"Canon","CameraType":"","CameraOwner":"","CameraDescription":"","CameraNotes":"","CreatedAt":"2020-01-15T17:25:10Z","UpdatedAt":"2020-01-15T17:27:42Z","DeletedAt":null},{"ID":60006,"CameraSlug":"canon-eos-5d","CameraModel":"EOS 5D","CameraMake":"Canon","CameraType":"","CameraOwner":"","CameraDescription":"","CameraNotes":"","CreatedAt":"2020-01-15T17:25:31Z","UpdatedAt":"2020-01-22T09:33:39Z","DeletedAt":null},{"ID":60002,"CameraSlug":"canon-eos-6d","CameraModel":"EOS 6D","CameraMake":"Canon","CameraType":"","CameraOwner":"","CameraDescription":"","CameraNotes":"","CreatedAt":"2020-01-15T17:25:04Z","UpdatedAt":"2020-01-20T10:36:41Z","DeletedAt":null},{"ID":60005,"CameraSlug":"canon-eos-7d","CameraModel":"EOS 7D","CameraMake":"Canon","CameraType":"","CameraOwner":"","CameraDescription":"","CameraNotes":"","CreatedAt":"2020-01-15T17:25:27Z","UpdatedAt":"2020-01-15T17:27:55Z","DeletedAt":null},{"ID":30001,"CameraSlug":"unknown","CameraModel":"Unknown","CameraMake":"","CameraType":"","CameraOwner":"","CameraDescription":"","CameraNotes":"","CreatedAt":"2020-01-15T03:59:45Z","UpdatedAt":"2020-01-16T22:45:46Z","DeletedAt":null},{"ID":60008,"CameraSlug":"apple-iphone-4s","CameraModel":"iPhone 4S","CameraMake":"Apple","CameraType":"","CameraOwner":"","CameraDescription":"","CameraNotes":"","CreatedAt":"2020-01-15T17:25:34Z","UpdatedAt":"2020-01-15T17:25:34Z","DeletedAt":null},{"ID":60001,"CameraSlug":"apple-iphone-5s","CameraModel":"iPhone 5s","CameraMake":"Apple","CameraType":"","CameraOwner":"","CameraDescription":"","CameraNotes":"","CreatedAt":"2020-01-15T17:25:03Z","UpdatedAt":"2020-01-15T17:27:53Z","DeletedAt":null},{"ID":60003,"CameraSlug":"apple-iphone-6","CameraModel":"iPhone 6","CameraMake":"Apple","CameraType":"","CameraOwner":"","CameraDescription":"","CameraNotes":"","CreatedAt":"2020-01-15T17:25:10Z","UpdatedAt":"2020-01-16T22:45:43Z","DeletedAt":null},{"ID":1,"CameraSlug":"apple-iphone-se","CameraModel":"iPhone SE","CameraMake":"Apple","CameraType":"","CameraOwner":"","CameraDescription":"","CameraNotes":"","CreatedAt":"2020-01-14T01:16:46Z","UpdatedAt":"2020-01-15T17:27:15Z","DeletedAt":null}],"categories":[{"LabelName":"airport","Title":"Airport"},{"LabelName":"animal","Title":"Animal"},{"LabelName":"architecture","Title":"Architecture"},{"LabelName":"beach","Title":"Beach"},{"LabelName":"beetle","Title":"Beetle"},{"LabelName":"beverage","Title":"Beverage"},{"LabelName":"bird","Title":"Bird"},{"LabelName":"bridge","Title":"Bridge"},{"LabelName":"building","Title":"Building"},{"LabelName":"car","Title":"Car"},{"LabelName":"cat","Title":"Cat"},{"LabelName":"computer","Title":"Computer"},{"LabelName":"drinks","Title":"Drinks"},{"LabelName":"farm","Title":"Farm"},{"LabelName":"flower","Title":"Flower"},{"LabelName":"fruit","Title":"Fruit"},{"LabelName":"info","Title":"Info"},{"LabelName":"kitchen","Title":"Kitchen"},{"LabelName":"landscape","Title":"Landscape"},{"LabelName":"lizard","Title":"Lizard"},{"LabelName":"monkey","Title":"Monkey"},{"LabelName":"nature","Title":"Nature"},{"Labe
2019-08-13 06:10:51 +00:00
let chai = require('../../../node_modules/chai/chai');
let assert = chai.assert;
const config = new Config(window.localStorage, window.clientConfig);
describe('common/session', () => {
2019-08-12 08:26:26 +00:00
const mock = new MockAdapter(Api);
2019-08-09 07:38:02 +00:00
2019-08-12 08:26:26 +00:00
beforeEach(() => {
window.onbeforeunload = () => 'Oh no!';
});
2019-08-09 07:38:02 +00:00
it('should construct session', () => {
const storage = window.localStorage;
const session = new Session(storage, config);
2019-08-09 07:38:02 +00:00
assert.equal(session.session_token, null);
});
2019-08-09 08:12:48 +00:00
it('should set, get and delete token', () => {
2019-08-09 07:38:02 +00:00
const storage = window.localStorage;
const session = new Session(storage, config);
2019-08-09 07:38:02 +00:00
assert.equal(session.session_token, null);
session.setToken(123421);
assert.equal(session.session_token, 123421);
const result = session.getToken();
assert.equal(result, 123421);
2019-08-09 08:12:48 +00:00
session.deleteToken();
assert.equal(session.session_token, null);
2019-08-09 07:38:02 +00:00
});
2019-08-09 08:12:48 +00:00
it('should set, get and delete user', () => {
2019-08-09 07:38:02 +00:00
const storage = window.localStorage;
const session = new Session(storage, config);
assert.equal(session.user, null);
const values = {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Role: "admin"};
2019-08-09 08:12:48 +00:00
const user = new User(values);
session.setUser(user);
assert.equal(session.user.FirstName, "Max");
assert.equal(session.user.Role, "admin");
2019-08-09 08:12:48 +00:00
const result = session.getUser();
assert.equal(result.ID, 5);
assert.equal(result.Email, "test@test.com");
2019-08-09 08:12:48 +00:00
session.deleteUser();
assert.equal(session.user, null);
});
it('should get user email', () => {
const storage = window.localStorage;
const session = new Session(storage, config);
const values = {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Role: "admin"};
2019-08-09 08:12:48 +00:00
const user = new User(values);
session.setUser(user);
const result = session.getEmail();
assert.equal(result, "test@test.com");
const values2 = { FirstName: "Max", LastName: "Last", Email: "test@test.com", Role: "admin"};
2019-08-09 08:12:48 +00:00
const user2 = new User(values2);
session.setUser(user2);
const result2 = session.getEmail();
assert.equal(result2, "");
session.deleteUser();
});
it('should get user firstname', () => {
const storage = window.localStorage;
const session = new Session(storage, config);
const values = {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Role: "admin"};
2019-08-09 08:12:48 +00:00
const user = new User(values);
session.setUser(user);
const result = session.getFirstName();
assert.equal(result, "Max");
const values2 = { FirstName: "Max", LastName: "Last", Email: "test@test.com", Role: "admin"};
2019-08-09 08:12:48 +00:00
const user2 = new User(values2);
session.setUser(user2);
const result2 = session.getFirstName();
assert.equal(result2, "");
session.deleteUser();
});
it('should get user full name', () => {
const storage = window.localStorage;
const session = new Session(storage, config);
const values = {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Role: "admin"};
2019-08-09 08:12:48 +00:00
const user = new User(values);
session.setUser(user);
const result = session.getFullName();
assert.equal(result, "Max Last");
const values2 = { FirstName: "Max", LastName: "Last", Email: "test@test.com", Role: "admin"};
2019-08-09 08:12:48 +00:00
const user2 = new User(values2);
session.setUser(user2);
const result2 = session.getFullName();
assert.equal(result2, "");
session.deleteUser();
2019-08-09 07:38:02 +00:00
});
2019-08-09 08:12:48 +00:00
it('should test whether user is set', () => {
const storage = window.localStorage;
const session = new Session(storage, config);
const values = {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Role: "admin"};
2019-08-09 08:12:48 +00:00
const user = new User(values);
session.setUser(user);
const result = session.isUser();
assert.equal(result, true);
session.deleteUser();
});
it('should test whether user is admin', () => {
const storage = window.localStorage;
const session = new Session(storage, config);
const values = {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Role: "admin"};
2019-08-09 08:12:48 +00:00
const user = new User(values);
session.setUser(user);
const result = session.isAdmin();
assert.equal(result, true);
session.deleteUser();
});
it('should test whether user is anonymous', () => {
const storage = window.localStorage;
const session = new Session(storage, config);
const values = {ID: 5, FirstName: "Max", LastName: "Last", Email: "test@test.com", Role: "admin"};
2019-08-09 08:12:48 +00:00
const user = new User(values);
session.setUser(user);
const result = session.isAnonymous();
assert.equal(result, false);
session.deleteUser();
});
2019-08-12 08:26:26 +00:00
it('should test login and logout', async() => {
mock
.onPost("session").reply(200, {token: "8877", user: {ID: 1, Email: "test@test.com"}})
.onDelete("session/8877").reply(200);
2019-08-12 08:26:26 +00:00
const storage = window.localStorage;
const session = new Session(storage, config);
2019-08-12 08:26:26 +00:00
assert.equal(session.session_token, null);
assert.equal(session.storage.user, undefined);
await session.login("test@test.com", "passwd");
assert.equal(session.session_token, 8877);
assert.equal(session.storage.user, '{"ID":1,"Email":"test@test.com"}');
2019-08-12 08:26:26 +00:00
await session.logout();
assert.equal(session.session_token, null);
mock.reset();
2019-08-12 08:26:26 +00:00
});
2019-08-09 08:12:48 +00:00
});