Skip to content

Commit e96cdf0

Browse files
committed
Add tests for logger
1 parent 908c83f commit e96cdf0

File tree

2 files changed

+222
-0
lines changed

2 files changed

+222
-0
lines changed

test/support/Helpers.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import _ from 'lodash';
2+
import Vue from 'vue';
3+
import Vuex from 'vuex';
4+
import VuexORM, { Database, Model } from '@vuex-orm/core';
5+
6+
Vue.use(Vuex);
7+
8+
/**
9+
* Create whole application.
10+
*/
11+
export function createApplication (namespace, entities) {
12+
const database = new Database();
13+
14+
_.forEach(entities, (entity) => {
15+
database.register(entity.model, entity.module || {})
16+
});
17+
18+
database.registerNamespace(namespace);
19+
20+
return database;
21+
}
22+
23+
/**
24+
* Create a new Vuex Store.
25+
*/
26+
export function createStore (entities) {
27+
const database = new Database();
28+
29+
_.forEach(entities, (entity) => {
30+
database.register(entity.model, entity.module || {})
31+
});
32+
33+
return new Vuex.Store({
34+
plugins: [VuexORM.install(database)]
35+
});
36+
}
37+
38+
/**
39+
* Create a new Vuex State.
40+
*/
41+
export function createState (namespace, state) {
42+
return {
43+
name: namespace,
44+
45+
..._.mapValues(state, data => {
46+
return { data }
47+
})
48+
};
49+
}
50+
51+
/**
52+
* Get action context that can be passed to action as argument.
53+
*/
54+
export function actionContext (context = {}) {
55+
return {
56+
state: context.state || {},
57+
rootState: context.rootState || {},
58+
getters: context.getters || sinon.spy(),
59+
rootGetters: context.rootGetters || sinon.spy(),
60+
dispatch: context.dispatch || sinon.spy(),
61+
commit: context.commit || sinon.spy()
62+
};
63+
}
64+
65+
export default {
66+
createApplication,
67+
actionContext
68+
}

test/unit/Logger.spec.js

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
import Logger from 'app/logger';
2+
import gql from 'graphql-tag';
3+
4+
describe('Logger', () => {
5+
it("should generate output when enabled", () => {
6+
const logger = new Logger(true);
7+
let logSpy = sinon.stub(console, 'log');
8+
9+
logger.log('test');
10+
expect(console.log.calledOnce).toBe(true);
11+
logSpy.restore();
12+
});
13+
14+
15+
it("shouldn't generate any output when not enabled", () => {
16+
const logger = new Logger(false);
17+
let logSpy = sinon.stub(console, 'log');
18+
19+
logger.log('test');
20+
expect(console.log.notCalled).toBe(true);
21+
logSpy.restore();
22+
});
23+
24+
describe('.log', () => {
25+
it("logs a message and variables", () => {
26+
const logger = new Logger(true);
27+
let logSpy = sinon.stub(console, 'log');
28+
29+
const obj = { someProp: "test" };
30+
31+
logger.log('test', 42, obj);
32+
expect(console.log.calledWith('[Vuex-ORM-Apollo]', 'test', 42, obj)).toBe(true);
33+
logSpy.restore();
34+
});
35+
});
36+
37+
describe('.group', () => {
38+
it("opens a new group", () => {
39+
const logger = new Logger(true);
40+
let logSpy = sinon.stub(console, 'group');
41+
42+
const obj = { someProp: "test" };
43+
44+
logger.group('test', 42, obj);
45+
expect(console.group.calledWith('[Vuex-ORM-Apollo]', 'test', 42, obj)).toBe(true);
46+
logSpy.restore();
47+
});
48+
});
49+
50+
describe('.groupEnd', () => {
51+
it("closes a new group", () => {
52+
const logger = new Logger(true);
53+
let logSpy = sinon.stub(console, 'groupEnd');
54+
55+
logger.groupEnd();
56+
expect(console.groupEnd.calledOnce).toBe(true);
57+
logSpy.restore();
58+
});
59+
});
60+
61+
describe('.logQuery', () => {
62+
it("pretty prints a query in a group when a string is given", () => {
63+
const logger = new Logger(true);
64+
let groupSpy = sinon.stub(console, 'group');
65+
let logSpy = sinon.stub(console, 'log');
66+
let groupEndSpy = sinon.stub(console, 'groupEnd');
67+
68+
const query = `
69+
mutation SomeBadFormattedQuery(
70+
$id: ID! ,
71+
$name:
72+
String!
73+
) {
74+
75+
SomeBadFormattedQuery(id:
76+
$id,
77+
name: $name) {
78+
user
79+
{ id,
80+
81+
name email}
82+
} }
83+
`;
84+
85+
const formattedQuery = `mutation SomeBadFormattedQuery($id: ID!, $name: String!) {
86+
SomeBadFormattedQuery(id: $id, name: $name) {
87+
user {
88+
id
89+
name
90+
email
91+
}
92+
}
93+
}
94+
`;
95+
96+
logger.logQuery(query);
97+
98+
expect(console.group.calledWith('[Vuex-ORM-Apollo]', 'Sending query:')).toBe(true);
99+
groupSpy.restore();
100+
101+
expect(console.log.calledWith(formattedQuery)).toEqual(true);
102+
logSpy.restore();
103+
104+
expect(console.groupEnd.calledOnce).toBe(true);
105+
groupEndSpy.restore();
106+
});
107+
});
108+
109+
it("pretty prints a query in a group when a gql() result is given", () => {
110+
const logger = new Logger(true);
111+
let groupSpy = sinon.stub(console, 'group');
112+
let logSpy = sinon.stub(console, 'log');
113+
let groupEndSpy = sinon.stub(console, 'groupEnd');
114+
115+
const query = gql(`
116+
mutation SomeBadFormattedQuery(
117+
$id: ID! ,
118+
$name:
119+
String!
120+
) {
121+
122+
SomeBadFormattedQuery(id:
123+
$id,
124+
name: $name) {
125+
user
126+
{ id,
127+
128+
name email}
129+
} }
130+
`);
131+
132+
const formattedQuery = `mutation SomeBadFormattedQuery($id: ID!, $name: String!) {
133+
SomeBadFormattedQuery(id: $id, name: $name) {
134+
user {
135+
id
136+
name
137+
email
138+
}
139+
}
140+
}
141+
`;
142+
143+
logger.logQuery(query);
144+
145+
expect(console.group.calledWith('[Vuex-ORM-Apollo]', 'Sending query:')).toBe(true);
146+
groupSpy.restore();
147+
148+
expect(console.log.calledWith(formattedQuery)).toEqual(true);
149+
logSpy.restore();
150+
151+
expect(console.groupEnd.calledOnce).toBe(true);
152+
groupEndSpy.restore();
153+
});
154+
});

0 commit comments

Comments
 (0)