Skip to content

Commit

Permalink
test: adding more unit tests (#107)
Browse files Browse the repository at this point in the history
  • Loading branch information
design1online authored Oct 14, 2023
1 parent b950acc commit ecedab2
Show file tree
Hide file tree
Showing 6 changed files with 605 additions and 478 deletions.
3 changes: 0 additions & 3 deletions client/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -270,9 +270,6 @@ export default class Client {
this.window.scrollTop(); // why do we do this?
this.window.resize(this.zoom());

log.debug('Client - loading client config');
this.config = config;

// load the character
this.loadCharacter();

Expand Down
138 changes: 135 additions & 3 deletions client/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,144 @@ jest.mock('./utils/detect');
* @test {Client}
*/
describe('Client', () => {
const instance = new Client();

let instance;

beforeEach(() => {
instance = new Client();
});

/**
* @test {Client#constructor}
*/
it('.constructor()', () => {
expect(Client).toBeDefined();
test('.constructor()', () => {
expect(instance).toBeDefined();
});

/**
* @test {Client#loadClient}
*/
test('.loadClient()', () => {
const spy = jest.spyOn(instance, "loadCharacter");
expect(spy.mock.calls.length).toEqual(0);

instance.loadClient();

expect(instance.keydownEventListener).toBeDefined();
expect(spy.mock.calls.length).toEqual(1);
});

/**
* @test {Client#welcomeContinue}
*/
describe('.welcomeContinue()', () => {

it('returns false if no game', () => {
// returns false if no game
expect(instance.game).toEqual(null);
expect(instance.welcomeContinue()).toBe(false);
});

it('dismisses the welcome screen', () => {
// mock the body
instance.body = {
removeClass: jest.fn()
}

// mock the game
instance.game = {
storage: {
data: {
welcome: true
},
save: jest.fn()
}
};

expect(instance.game.storage.data.welcome).toEqual(true);
const welcomeScreenDismissed = instance.welcomeContinue();
expect(instance.game.storage.data.welcome).toEqual(false);
expect(instance.game.storage.save).toHaveBeenCalled();
expect(instance.body.removeClass).toHaveBeenCalledWith('welcomeMessage');
expect(welcomeScreenDismissed).toEqual(true);
});
});

describe('.login()', () => {
it('returns false if currently logging in', () => {
instance.loggingIn = true;
expect(instance.login()).toEqual(false);
});

it('returns false if no game', () => {
instance.game = null;
expect(instance.login()).toEqual(false);
});

it('returns false if game is not loaded', () => {
instance.game = { loaded: false };
expect(instance.login()).toEqual(false);
});

it('returns false if there is a statusMessage', () => {
instance.game = { loaded: true };
instance.statusMessage = 'something';
expect(instance.login()).toEqual(false);
});

it('returns false if cannot verify login form', () => {
instance.game = { loaded: true };
instance.statusMessage = 'something';
instance.verifyForm = () => { return false; }
expect(instance.login()).toEqual(false);
});

it('returns true and connects to the game', () => {
instance.loggingIn = false;
instance.game = { loaded: true, connect: jest.fn() };
instance.statusMessage = null;
instance.verifyForm = () => { return true; }
expect(instance.login()).toEqual(true);
expect(instance.game.connect).toHaveBeenCalled();
});
});

describe('.loginAsGuest()', () => {
it ('returns false if no game', () => {
expect(instance.loginAsGuest()).toEqual(false);
});

it ('returns true if game exists', () => {
instance.login = jest.fn();
instance.game = {};
expect(instance.guestLogin).toEqual(false);
expect(instance.loginAsGuest()).toEqual(true);
expect(instance.guestLogin).toEqual(true);
expect(instance.login).toHaveBeenCalled();
});
});

test('.loadCharacter()', () => {
const validClasses = ['about', 'git', 'credits'];
const invalidClasses = ['blah', 'wrong', ''];

instance.game = { started: true };

instance.wrapper = {
hasClass: (className) => instance.wrapper.className.indexOf(className) !== -1,
attr: jest.fn().mockReturnValue(instance.wrapper.className),
removeClass: jest.fn().mockReturnValue(instance.wrapper),
addClass: jest.fn()
}

validClasses.forEach(className => {
instance.wrapper.className = className;
expect(instance.loadCharacter()).toEqual(true);
});

invalidClasses.forEach(className => {
instance.wrapper.className = className;
expect(instance.loadCharacter()).toEqual(false);
});
});
});
2 changes: 1 addition & 1 deletion coverage/badge.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 3 additions & 3 deletions coverage/coverage-summary.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{"total": {"lines":{"total":363,"covered":60,"skipped":0,"pct":16.52},"statements":{"total":377,"covered":61,"skipped":0,"pct":16.18},"functions":{"total":70,"covered":6,"skipped":0,"pct":8.57},"branches":{"total":177,"covered":15,"skipped":0,"pct":8.47},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Applications/MAMP/htdocs/WTF-Adventure/client/index.js": {"lines":{"total":300,"covered":37,"skipped":0,"pct":12.33},"functions":{"total":59,"covered":1,"skipped":0,"pct":1.69},"statements":{"total":313,"covered":37,"skipped":0,"pct":11.82},"branches":{"total":121,"covered":1,"skipped":0,"pct":0.82}}
,"/Applications/MAMP/htdocs/WTF-Adventure/client/lib/log.js": {"lines":{"total":56,"covered":22,"skipped":0,"pct":39.28},"functions":{"total":10,"covered":5,"skipped":0,"pct":50},"statements":{"total":57,"covered":23,"skipped":0,"pct":40.35},"branches":{"total":51,"covered":14,"skipped":0,"pct":27.45}}
{"total": {"lines":{"total":361,"covered":146,"skipped":0,"pct":40.44},"statements":{"total":375,"covered":148,"skipped":0,"pct":39.46},"functions":{"total":70,"covered":18,"skipped":0,"pct":25.71},"branches":{"total":177,"covered":43,"skipped":0,"pct":24.29},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}}
,"/Applications/MAMP/htdocs/WTF-Adventure/client/index.js": {"lines":{"total":298,"covered":121,"skipped":0,"pct":40.6},"functions":{"total":59,"covered":13,"skipped":0,"pct":22.03},"statements":{"total":311,"covered":122,"skipped":0,"pct":39.22},"branches":{"total":121,"covered":26,"skipped":0,"pct":21.48}}
,"/Applications/MAMP/htdocs/WTF-Adventure/client/lib/log.js": {"lines":{"total":56,"covered":24,"skipped":0,"pct":42.85},"functions":{"total":10,"covered":5,"skipped":0,"pct":50},"statements":{"total":57,"covered":25,"skipped":0,"pct":43.85},"branches":{"total":51,"covered":17,"skipped":0,"pct":33.33}}
,"/Applications/MAMP/htdocs/WTF-Adventure/client/utils/modules.js": {"lines":{"total":7,"covered":1,"skipped":0,"pct":14.28},"functions":{"total":1,"covered":0,"skipped":0,"pct":0},"statements":{"total":7,"covered":1,"skipped":0,"pct":14.28},"branches":{"total":5,"covered":0,"skipped":0,"pct":0}}
}
54 changes: 27 additions & 27 deletions coverage/lcov-report/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,30 +23,30 @@ <h1>All files</h1>
<div class='clearfix'>

<div class='fl pad1y space-right2'>
<span class="strong">16.18% </span>
<span class="strong">39.46% </span>
<span class="quiet">Statements</span>
<span class='fraction'>61/377</span>
<span class='fraction'>148/375</span>
</div>


<div class='fl pad1y space-right2'>
<span class="strong">8.47% </span>
<span class="strong">24.29% </span>
<span class="quiet">Branches</span>
<span class='fraction'>15/177</span>
<span class='fraction'>43/177</span>
</div>


<div class='fl pad1y space-right2'>
<span class="strong">8.57% </span>
<span class="strong">25.71% </span>
<span class="quiet">Functions</span>
<span class='fraction'>6/70</span>
<span class='fraction'>18/70</span>
</div>


<div class='fl pad1y space-right2'>
<span class="strong">16.52% </span>
<span class="strong">40.44% </span>
<span class="quiet">Lines</span>
<span class='fraction'>60/363</span>
<span class='fraction'>146/361</span>
</div>


Expand Down Expand Up @@ -80,32 +80,32 @@ <h1>All files</h1>
</thead>
<tbody><tr>
<td class="file low" data-value="client"><a href="client/index.html">client</a></td>
<td data-value="11.82" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 11%"></div><div class="cover-empty" style="width: 89%"></div></div>
<td data-value="39.22" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 39%"></div><div class="cover-empty" style="width: 61%"></div></div>
</td>
<td data-value="11.82" class="pct low">11.82%</td>
<td data-value="313" class="abs low">37/313</td>
<td data-value="0.82" class="pct low">0.82%</td>
<td data-value="121" class="abs low">1/121</td>
<td data-value="1.69" class="pct low">1.69%</td>
<td data-value="59" class="abs low">1/59</td>
<td data-value="12.33" class="pct low">12.33%</td>
<td data-value="300" class="abs low">37/300</td>
<td data-value="39.22" class="pct low">39.22%</td>
<td data-value="311" class="abs low">122/311</td>
<td data-value="21.48" class="pct low">21.48%</td>
<td data-value="121" class="abs low">26/121</td>
<td data-value="22.03" class="pct low">22.03%</td>
<td data-value="59" class="abs low">13/59</td>
<td data-value="40.6" class="pct low">40.6%</td>
<td data-value="298" class="abs low">121/298</td>
</tr>

<tr>
<td class="file low" data-value="client/lib"><a href="client/lib/index.html">client/lib</a></td>
<td data-value="40.35" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 40%"></div><div class="cover-empty" style="width: 60%"></div></div>
<td data-value="43.85" class="pic low">
<div class="chart"><div class="cover-fill" style="width: 43%"></div><div class="cover-empty" style="width: 57%"></div></div>
</td>
<td data-value="40.35" class="pct low">40.35%</td>
<td data-value="57" class="abs low">23/57</td>
<td data-value="27.45" class="pct low">27.45%</td>
<td data-value="51" class="abs low">14/51</td>
<td data-value="43.85" class="pct low">43.85%</td>
<td data-value="57" class="abs low">25/57</td>
<td data-value="33.33" class="pct low">33.33%</td>
<td data-value="51" class="abs low">17/51</td>
<td data-value="50" class="pct medium">50%</td>
<td data-value="10" class="abs medium">5/10</td>
<td data-value="39.28" class="pct low">39.28%</td>
<td data-value="56" class="abs low">22/56</td>
<td data-value="42.85" class="pct low">42.85%</td>
<td data-value="56" class="abs low">24/56</td>
</tr>

<tr>
Expand All @@ -131,7 +131,7 @@ <h1>All files</h1>
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2023-10-13T01:55:22.850Z
at 2023-10-13T20:51:54.292Z
</div>
<script src="prettify.js"></script>
<script>
Expand Down
Loading

0 comments on commit ecedab2

Please sign in to comment.