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

153 lines
13 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.__CONFIG__ = {"albums":[{"ID":1,"UID":"aqasltilq1bnar68","CoverUID":"","ParentUID":"","FolderUID":"","Slug":"example-album","Name":"Example Album","Type":"","Filter":"","Description":"","Notes":"","Order":"oldest","Template":"","Favorite":true,"Links":null,"CreatedAt":"2020-05-23T16:29:42Z","UpdatedAt":"2020-05-23T16:29:42Z"}],"author":"PhotoPrism.org","cameras":[{"ID":8,"Slug":"apple-iphone-5s","Model":"iPhone 5s","Make":"Apple"},{"ID":9,"Slug":"apple-iphone-6","Model":"iPhone 6","Make":"Apple"},{"ID":13,"Slug":"apple-iphone-se","Model":"iPhone SE","Make":"Apple"},{"ID":17,"Slug":"apple-iphone-x","Model":"iPhone X","Make":"Apple"},{"ID":7,"Slug":"canon-eos-60d","Model":"EOS 60D","Make":"Canon"},{"ID":5,"Slug":"canon-eos-6d","Model":"EOS 6D","Make":"Canon"},{"ID":14,"Slug":"canon-eos-700d","Model":"EOS 700D","Make":"Canon"},{"ID":3,"Slug":"canon-eos-7d","Model":"EOS 7D","Make":"Canon"},{"ID":16,"Slug":"gopro-hero4-black","Model":"HERO4 Black","Make":"GoPro"},{"ID":19,"Slug":"huawei-ele-l29","Model":"ELE-L29","Make":"HUAWEI"},{"ID":18,"Slug":"motorola-moto-g-7-power","Model":"moto g(7) power","Make":"motorola"},{"ID":12,"Slug":"nikon-corporation-nikon-d90","Model":"NIKON D90","Make":"NIKON CORPORATION"},{"ID":11,"Slug":"panasonic-dc-gh5s","Model":"DC-GH5S","Make":"Panasonic"},{"ID":4,"Slug":"panasonic-dmc-fz100","Model":"DMC-FZ100","Make":"Panasonic"},{"ID":10,"Slug":"panasonic-dmc-gx85","Model":"DMC-GX85","Make":"Panasonic"},{"ID":6,"Slug":"panasonic-dmc-lx5","Model":"DMC-LX5","Make":"Panasonic"},{"ID":2,"Slug":"samsung-gt-i9000","Model":"GT-I9000","Make":"SAMSUNG"},{"ID":30001,"Slug":"samsung-sm-g900f","Model":"SM-G900F","Make":"samsung"},{"ID":15,"Slug":"sony-ilce-5100","Model":"ILCE-5100","Make":"SONY"},{"ID":1,"Slug":"zz","Model":"Unknown","Make":""}],"categories":[{"UID":"lqaslsn3njvs7phk","Slug":"animal","Name":"Animal"},{"UID":"lqaslv92v88svntk","Slug":"architecture","Name":"Architecture"},{"UID":"lqaslssgexee300l","Slug":"beach","Name":"Beach"},{"UID":"lqaslte2t6c421m8","Slug":"beetle","Name":"Beetle"},{"UID":"lqaslsw2hb8ldc8r","Slug":"bird","Name":"Bird"},{"UID":"lqaslt931dbwp7qv","Slug":"cat","Name":"Cat"},{"UID":"lqaslu6z3bx3gw68","Slug":"farm","Name":"Farm"},{"UID":"lqaslso23vakxxjc","Slug":"insect","Name":"Insect"},{"UID":"lqasluk337xy8ig3","Slug":"monkey","Name":"Monkey"},{"UID":"lqasluq12dlf4qxp","Slug":"people","Name":"People"},{"UID":"lqaslw21ovq4fkzi","Slug":"reptile","Name":"Reptile"},{"UID":"lqasluq1v7gv0h5m","Slug":"snow","Name":"Snow"},{"UID":"lqaslv9187r4rwuz","Slug":"tower","Name":"Tower"},{"UID":"lqaslss1i0zlvdqz","Slug":"water","Name":"Water"},{"UID":"lqaslt93im1tw5b7","Slug":"wildlife","Name":"Wildlife"}],"clip":160,"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"}],"copyright":"(c) 2018-2020 PhotoPrism.org \u003chello@photoprism.org\u003e","count":{"photos":74,"videos":5,"hidden":0,"favorites":4,"private":2,"review":1,"albums":1,"folders":41,"moments":0,"countries":6,"places":17,"labels":24,"labelMaxPhotos":7},"countries":[{"ID":"fr","Slug":"france","Name":"France"},{"ID":"de","Slug":"germany","Name":"Germany"},{"ID":"gr","Slug":"greece","Name":"Greece"},{"ID":"it","Slug":"italy","Name":"Italy"},{"ID":"za","Slug":"south-africa","Name":"South Africa"},{"ID":"us","Slug":"usa","Name":"USA"},{"ID":"zz","Slug":"zz","Name"
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.__CONFIG__);
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
});