Skip to content

Commit 5798e8e

Browse files
committed
test: added test for views store, rewrote views store to typescript
1 parent 7ececcb commit 5798e8e

3 files changed

Lines changed: 61 additions & 21 deletions

File tree

jest.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ module.exports = {
2424
displayName: 'node',
2525
preset: 'ts-jest',
2626
testEnvironment: 'node',
27-
testMatch: ['**/test/**/*.test.node.js?(x)'],
27+
testMatch: ['**/test/**/*.test.node.{js,ts}?(x)'],
2828
transform: {
2929
'^.+\\.js$': 'babel-jest',
3030
'^.+\\.vue$': 'vue-jest',
Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
1-
const desktopViews = [
1+
interface Element {
2+
type: string;
3+
size?: number;
4+
}
5+
6+
interface View {
7+
id: string;
8+
name: string;
9+
elements: Element[];
10+
}
11+
12+
const desktopViews: View[] = [
213
{
314
id: 'summary',
415
name: 'Summary',
@@ -55,8 +66,12 @@ const androidViews = [
5566
// FIXME: Decide depending on what kind of device is being viewed, not from which device it is being viewed.
5667
const defaultViews = !process.env.VUE_APP_ON_ANDROID ? desktopViews : androidViews;
5768

69+
interface State {
70+
views: View[];
71+
}
72+
5873
// initial state
59-
const _state = {
74+
const _state: State = {
6075
views: [],
6176
};
6277

@@ -66,48 +81,56 @@ const getters = {};
6681
// actions
6782
const actions = {
6883
async load({ commit }) {
69-
commit('loadViews');
84+
let views: View[];
85+
if (typeof localStorage !== 'undefined') {
86+
const views_json = localStorage.views;
87+
if (views_json && views_json.length >= 1) {
88+
views = JSON.parse(views_json);
89+
}
90+
}
91+
if (!views) {
92+
views = defaultViews;
93+
}
94+
commit('loadViews', views);
7095
},
71-
async save({ state, commit }) {
96+
async save({ state, dispatch }) {
7297
localStorage.views = JSON.stringify(state.views);
73-
// After save, reload views
74-
commit('loadViews');
98+
// After save, reload views from localStorage
99+
await dispatch('load');
75100
},
76101
};
77102

78103
// mutations
79104
const mutations = {
80-
loadViews(state) {
81-
const views_json = localStorage.views;
82-
if (views_json && views_json.length >= 1) {
83-
state.views = JSON.parse(views_json);
84-
} else {
85-
state.views = defaultViews;
86-
}
105+
loadViews(state: State, views: View[]) {
106+
state.views = views;
87107
console.log('Loaded views:', state.views);
88108
},
89-
setElements(state, { view_id, elements }) {
109+
clearViews(state: State) {
110+
state.views = [];
111+
},
112+
setElements(state: State, { view_id, elements }) {
90113
state.views.find(v => v.id == view_id).elements = elements;
91114
},
92-
restoreDefaults(state) {
115+
restoreDefaults(state: State) {
93116
state.views = defaultViews;
94117
},
95-
addView(state, view) {
118+
addView(state: State, view: View) {
96119
state.views.push({ ...view, elements: [] });
97120
},
98-
removeView(state, { view_id }) {
121+
removeView(state: State, { view_id }) {
99122
const idx = state.views.map(v => v.id).indexOf(view_id);
100123
state.views.splice(idx, 1);
101124
},
102-
editView(state, { view_id, el_id, type }) {
125+
editView(state: State, { view_id, el_id, type }) {
103126
console.log(view_id, el_id, type);
104127
console.log(state.views);
105128
state.views.find(v => v.id == view_id).elements[el_id].type = type;
106129
},
107-
addVisualization(state, { view_id, type }) {
130+
addVisualization(state: State, { view_id, type }) {
108131
state.views.find(v => v.id == view_id).elements.push({ type: type });
109132
},
110-
removeVisualization(state, { view_id, el_id }) {
133+
removeVisualization(state: State, { view_id, el_id }) {
111134
state.views.find(v => v.id == view_id).elements.splice(el_id, 1);
112135
},
113136
};

test/unit/store/views.test.node.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import store from '~/store';
2+
3+
beforeEach(() => {
4+
store.commit('views/clearViews');
5+
});
6+
7+
test('load default views', () => {
8+
expect(store.state.views.views).toHaveLength(0);
9+
store.dispatch('views/load');
10+
expect(store.state.views.views).not.toHaveLength(0);
11+
});
12+
13+
test('loads specific views', () => {
14+
expect(store.state.views.views).toHaveLength(0);
15+
store.commit('views/loadViews', [{ id: 'something', name: 'Something', elements: [] }]);
16+
expect(store.state.views.views).not.toHaveLength(0);
17+
});

0 commit comments

Comments
 (0)