@internetarchive/bookreader 5.0.0-43 → 5.0.0-44-a1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/BookReader/BookReader.css +1 -2
  2. package/BookReader/BookReader.js +1 -1
  3. package/BookReader/BookReader.js.map +1 -1
  4. package/BookReader/ia-bookreader-bundle.js +35 -35
  5. package/BookReader/ia-bookreader-bundle.js.map +1 -1
  6. package/BookReader/plugins/plugin.tts.js +1 -1
  7. package/BookReader/plugins/plugin.tts.js.map +1 -1
  8. package/BookReaderDemo/IADemoBr.js +30 -0
  9. package/BookReaderDemo/demo-internetarchive.html +3 -0
  10. package/babel.config.js +1 -1
  11. package/package.json +10 -16
  12. package/renovate.json +7 -4
  13. package/src/BookNavigator/book-navigator.js +4 -0
  14. package/src/BookNavigator/downloads/downloads-provider.js +14 -5
  15. package/src/BookNavigator/downloads/downloads.js +23 -1
  16. package/src/css/_controls.scss +1 -2
  17. package/src/plugins/tts/plugin.tts.js +15 -3
  18. package/tests/{karma → jest}/BookNavigator/book-navigator.test.js +119 -104
  19. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmark-button.test.js +13 -14
  20. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmark-edit.test.js +25 -26
  21. package/tests/{karma → jest}/BookNavigator/bookmarks/bookmarks-list.test.js +41 -42
  22. package/tests/jest/BookNavigator/bookmarks/ia-bookmarks.test.js +45 -0
  23. package/tests/{karma → jest}/BookNavigator/downloads/downloads-provider.test.js +18 -18
  24. package/tests/{karma → jest}/BookNavigator/downloads/downloads.test.js +7 -8
  25. package/tests/{karma → jest}/BookNavigator/sharing/sharing-provider.test.js +8 -8
  26. package/tests/jest/BookNavigator/visual-adjustments.test.js +200 -0
  27. package/tests/{karma → jest}/BookNavigator/volumes/volumes-provider.test.js +38 -38
  28. package/tests/{karma → jest}/BookNavigator/volumes/volumes.test.js +15 -16
  29. package/tests/jest/plugins/tts/AbstractTTSEngine.test.js +3 -3
  30. package/karma.conf.js +0 -23
  31. package/tests/karma/BookNavigator/bookmarks/ia-bookmarks.test.js +0 -57
  32. package/tests/karma/BookNavigator/visual-adjustments.test.js +0 -201
@@ -0,0 +1,200 @@
1
+ import {
2
+ html,
3
+ fixture,
4
+ oneEvent,
5
+ } from '@open-wc/testing-helpers';
6
+ import sinon from 'sinon';
7
+ import { IABookVisualAdjustments } from '@/src/BookNavigator/visual-adjustments/visual-adjustments.js';
8
+
9
+ const options = [{
10
+ id: 'contrast',
11
+ name: 'Adjust contrast',
12
+ active: true,
13
+ min: 0,
14
+ max: 150,
15
+ step: 1,
16
+ value: 100,
17
+ }, {
18
+ id: 'invert',
19
+ name: 'Invert colors',
20
+ active: false,
21
+ }, {
22
+ id: 'brightness',
23
+ name: 'Adjust brightness',
24
+ active: false,
25
+ value: 100,
26
+ }];
27
+
28
+ const container = (renderHeader = false) => (
29
+ html`<ia-book-visual-adjustments .options=${options} ?renderHeader=${renderHeader}></ia-book-visual-adjustments>`
30
+ );
31
+
32
+ describe('<ia-book-visual-adjustments>', () => {
33
+ afterEach(() => {
34
+ sinon.restore();
35
+ });
36
+
37
+ test('sets default properties', async () => {
38
+ const el = await fixture(container());
39
+
40
+ expect(el.options).toBeDefined();
41
+ expect(el.options.length).toEqual(options.length);
42
+ expect(el.renderHeader).toBeDefined();
43
+ expect(el.renderHeader).toBeFalsy();
44
+ expect(el.activeCount).toBeDefined();
45
+ expect(el.showZoomControls).toBeTruthy();
46
+ });
47
+
48
+ test('renders all properties of a visual adjustment option', async () => {
49
+ const el = await fixture(container());
50
+
51
+ await el.updateComplete;
52
+
53
+ const label = el.shadowRoot.querySelector('label');
54
+ const name = label.querySelector('.name');
55
+ const checkbox = label.querySelector('input');
56
+ expect(name.textContent).toEqual(options[0].name);
57
+ expect(checkbox.checked).toEqual(true);
58
+ });
59
+
60
+ test('can render header with active options count', async () => {
61
+ const renderHeader = true;
62
+ const el = await fixture(container(renderHeader));
63
+ expect(el.shadowRoot.querySelector('header p').textContent).toContain('1');
64
+ });
65
+
66
+ test('does not render active options count element when none are selected', async () => {
67
+ const el = await fixture(container());
68
+
69
+ el.options = [options[1]];
70
+ await el.updateComplete;
71
+
72
+ expect(el.shadowRoot.querySelector('header p')).toBe(null);
73
+ });
74
+
75
+ test('changes option\'s active state when input changed', async () => {
76
+ const el = await fixture(container());
77
+
78
+ el.shadowRoot.querySelector('li input').dispatchEvent(new Event('change'));
79
+ await el.updateComplete;
80
+
81
+ expect(el.options[0].active).toEqual(false);
82
+ });
83
+
84
+ test('renders zoom in and out controls when enabled', async () => {
85
+ const el = await fixture(container());
86
+
87
+ expect(el.shadowRoot.querySelector('.zoom_out')).toBeDefined();
88
+ expect(el.shadowRoot.querySelector('.zoom_in')).toBeDefined();
89
+ });
90
+
91
+ test('does not render zoom controls when disabled', async () => {
92
+ const el = await fixture(container());
93
+
94
+ el.showZoomControls = false;
95
+ await el.updateComplete;
96
+
97
+ expect(el.shadowRoot.querySelector('.zoom_out')).toBe(null);
98
+ expect(el.shadowRoot.querySelector('.zoom_in')).toBe(null);
99
+ });
100
+
101
+ describe('Custom events', () => {
102
+ test('prepareEventDetails returns proper params', async () => {
103
+ const el = await fixture(container());
104
+ await el.updateComplete;
105
+ const params = el.prepareEventDetails();
106
+
107
+ expect(params.activeCount).toBeDefined();
108
+ expect(typeof (params.activeCount)).toEqual('number');
109
+ expect(params.changedOptionId).toBeDefined();
110
+ expect(typeof (params.changedOptionId)).toEqual('string');
111
+ expect(params.options).toBeDefined();
112
+ expect(params.options.length).toBeDefined();
113
+ expect(params.options.length).toBeGreaterThan(0);
114
+ });
115
+ test('emitOptionChangedEvent calls for the params', async () => {
116
+ IABookVisualAdjustments.prototype.prepareEventDetails = sinon.fake();
117
+ const el = await fixture(container());
118
+ await el.updateComplete;
119
+
120
+ expect(el.prepareEventDetails.callCount).toEqual(1);
121
+ });
122
+ test('triggers an emitOptionChangedEvent event at firstUpdate', async () => {
123
+ IABookVisualAdjustments.prototype.emitOptionChangedEvent = sinon.fake();
124
+ const el = await fixture(container());
125
+
126
+ expect(el.emitOptionChangedEvent.callCount).toEqual(1);
127
+ });
128
+
129
+ test('triggers an emitOptionChangedEvent event when a checkbox\'s change event fires', async () => {
130
+ IABookVisualAdjustments.prototype.emitOptionChangedEvent = sinon.fake();
131
+ const el = await fixture(container());
132
+
133
+ expect(el.emitOptionChangedEvent.callCount).toEqual(1); // firstUpdate fire
134
+
135
+ el.shadowRoot.querySelector('li input').dispatchEvent(new Event('change'));
136
+ expect(el.emitOptionChangedEvent.callCount).toEqual(2);
137
+ });
138
+
139
+ test('triggers an emitOptionChangedEvent event when a range\'s change event fires', async () => {
140
+ IABookVisualAdjustments.prototype.emitOptionChangedEvent = sinon.fake();
141
+
142
+ const el = await fixture(container());
143
+ expect(el.emitOptionChangedEvent.callCount).toEqual(1); // firstUpdate fire
144
+
145
+ el.shadowRoot.querySelector('[name="brightness_range"]').dispatchEvent(new Event('change'));
146
+ expect(el.emitOptionChangedEvent.callCount).toEqual(2);
147
+ });
148
+
149
+ test('emits a zoom out event when zoom out button clicked', async () => {
150
+ const el = await fixture(container());
151
+
152
+ setTimeout(() => (
153
+ el.shadowRoot.querySelector('.zoom_out').click()
154
+ ));
155
+ const response = await oneEvent(el, 'visualAdjustmentZoomOut');
156
+
157
+ expect(response).toBeDefined();
158
+ });
159
+
160
+ test('emits a zoom in event when zoom in button clicked', async () => {
161
+ const el = await fixture(container());
162
+
163
+ setTimeout(() => (
164
+ el.shadowRoot.querySelector('.zoom_in').click()
165
+ ));
166
+ const response = await oneEvent(el, 'visualAdjustmentZoomIn');
167
+
168
+ expect(response).toBeDefined();
169
+ });
170
+ });
171
+
172
+ test('sets range defaults when none supplied', async () => {
173
+ const el = await fixture(container());
174
+ const brightnessRange = el.shadowRoot.querySelector('[name="brightness_range"]');
175
+
176
+ expect(brightnessRange.getAttribute('min')).toEqual('0');
177
+ expect(brightnessRange.getAttribute('max')).toEqual('100');
178
+ expect(brightnessRange.getAttribute('step')).toEqual('1');
179
+ });
180
+
181
+ test('sets the updated range value on the options prop', async () => {
182
+ const el = await fixture(container());
183
+ const { id } = options[0];
184
+ const newValue = 120;
185
+
186
+ el.setRangeValue(id, newValue);
187
+ await el.updateComplete;
188
+
189
+ expect(el.options[0].value).toEqual(newValue);
190
+ });
191
+
192
+ test('triggers a setRangeValue event when a range\'s input event fires', async () => {
193
+ IABookVisualAdjustments.prototype.setRangeValue = sinon.fake();
194
+
195
+ const el = await fixture(container());
196
+
197
+ el.shadowRoot.querySelector('[name="brightness_range"]').dispatchEvent(new Event('input'));
198
+ expect(el.setRangeValue.callCount).toEqual(1);
199
+ });
200
+ });
@@ -1,6 +1,6 @@
1
- import { expect, fixture, fixtureCleanup, fixtureSync } from '@open-wc/testing';
1
+ import { fixture, fixtureCleanup, fixtureSync } from '@open-wc/testing-helpers';
2
2
  import sinon from 'sinon';
3
- import volumesProvider from '../../../../src/BookNavigator/volumes/volumes-provider';
3
+ import volumesProvider from '@/src/BookNavigator/volumes/volumes-provider';
4
4
 
5
5
  const brOptions = {
6
6
  "options": {
@@ -39,7 +39,7 @@ afterEach(() => {
39
39
  });
40
40
 
41
41
  describe('Volumes Provider', () => {
42
- it('constructor', () => {
42
+ test('constructor', () => {
43
43
  const onProviderChange = sinon.fake();
44
44
  const baseHost = "https://archive.org";
45
45
  const provider = new volumesProvider({
@@ -51,20 +51,20 @@ describe('Volumes Provider', () => {
51
51
  const files = brOptions.options.multipleBooksList.by_subprefix;
52
52
  const volumeCount = Object.keys(files).length;
53
53
 
54
- expect(provider.onProviderChange).to.equal(onProviderChange);
55
- expect(provider.id).to.equal('volumes');
56
- expect(provider.icon).to.exist;
57
- expect(fixtureSync(provider.icon).tagName).to.equal('svg');
58
- expect(provider.label).to.equal(`Viewable files (${volumeCount})`);
59
- expect(provider.viewableFiles).to.exist;
60
- expect(provider.viewableFiles.length).to.equal(3);
61
-
62
- expect(provider.component.hostUrl).to.exist;
63
- expect(provider.component.hostUrl).to.equal(baseHost);
64
- expect(provider.component).to.exist;
54
+ expect(provider.onProviderChange).toEqual(onProviderChange);
55
+ expect(provider.id).toEqual('volumes');
56
+ expect(provider.icon).toBeDefined();
57
+ expect(fixtureSync(provider.icon).tagName).toEqual('svg');
58
+ expect(provider.label).toEqual(`Viewable files (${volumeCount})`);
59
+ expect(provider.viewableFiles).toBeDefined();
60
+ expect(provider.viewableFiles.length).toEqual(3);
61
+
62
+ expect(provider.component.hostUrl).toBeDefined();
63
+ expect(provider.component.hostUrl).toEqual(baseHost);
64
+ expect(provider.component).toBeDefined();
65
65
  });
66
66
 
67
- it('sorting cycles - render sort actionButton', async () => {
67
+ test('sorting cycles - render sort actionButton', async () => {
68
68
  const onProviderChange = sinon.fake();
69
69
  const baseHost = "https://archive.org";
70
70
  const provider = new volumesProvider({
@@ -73,22 +73,22 @@ describe('Volumes Provider', () => {
73
73
  onProviderChange
74
74
  });
75
75
 
76
- expect(provider.sortOrderBy).to.equal("default");
76
+ expect(provider.sortOrderBy).toEqual("default");
77
77
 
78
78
  provider.sortVolumes("title_asc");
79
- expect(provider.sortOrderBy).to.equal("title_asc");
80
- expect(fixtureSync(provider.sortButton).outerHTML).includes("sort-by asc-icon");
79
+ expect(provider.sortOrderBy).toEqual("title_asc");
80
+ expect(fixtureSync(provider.sortButton).outerHTML).toContain("sort-by asc-icon");
81
81
 
82
82
  provider.sortVolumes("title_desc");
83
- expect(provider.sortOrderBy).to.equal("title_desc");
84
- expect(fixtureSync(provider.sortButton).outerHTML).includes("sort-by desc-icon");
83
+ expect(provider.sortOrderBy).toEqual("title_desc");
84
+ expect(fixtureSync(provider.sortButton).outerHTML).toContain("sort-by desc-icon");
85
85
 
86
86
  provider.sortVolumes("default");
87
- expect(provider.sortOrderBy).to.equal("default");
88
- expect(fixtureSync(provider.sortButton).outerHTML).includes("sort-by neutral-icon");
87
+ expect(provider.sortOrderBy).toEqual("default");
88
+ expect(fixtureSync(provider.sortButton).outerHTML).toContain("sort-by neutral-icon");
89
89
  });
90
90
 
91
- it('sort volumes in initial order', async () => {
91
+ test('sort volumes in initial order', async () => {
92
92
  const onProviderChange = sinon.fake();
93
93
  const baseHost = "https://archive.org";
94
94
  const provider = new volumesProvider({
@@ -103,15 +103,15 @@ describe('Volumes Provider', () => {
103
103
 
104
104
  provider.sortVolumes("default");
105
105
 
106
- expect(provider.sortOrderBy).to.equal("default");
107
- expect(provider.actionButton).to.exist;
106
+ expect(provider.sortOrderBy).toEqual("default");
107
+ expect(provider.actionButton).toBeDefined();
108
108
 
109
109
  const providerFileTitles = provider.viewableFiles.map(item => item.title);
110
110
  // use `.eql` for "lose equality" in order to deeply compare values.
111
- expect(providerFileTitles).to.eql([...origSortTitles]);
111
+ expect(providerFileTitles).toEqual([...origSortTitles]);
112
112
  });
113
113
 
114
- it('sort volumes in ascending title order', async () => {
114
+ test('sort volumes in ascending title order', async () => {
115
115
  const onProviderChange = sinon.fake();
116
116
  const baseHost = "https://archive.org";
117
117
  const provider = new volumesProvider({
@@ -126,15 +126,15 @@ describe('Volumes Provider', () => {
126
126
 
127
127
  provider.sortVolumes("title_asc");
128
128
 
129
- expect(provider.sortOrderBy).to.equal("title_asc");
130
- expect(provider.actionButton).to.exist;
129
+ expect(provider.sortOrderBy).toEqual("title_asc");
130
+ expect(provider.actionButton).toBeDefined();
131
131
 
132
132
  const providerFileTitles = provider.viewableFiles.map(item => item.title);
133
133
  // use `.eql` for "lose equality" in order to deeply compare values.
134
- expect(providerFileTitles).to.eql([...ascendingTitles]);
134
+ expect(providerFileTitles).toEqual([...ascendingTitles]);
135
135
  });
136
136
 
137
- it('sort volumes in descending title order', async () => {
137
+ test('sort volumes in descending title order', async () => {
138
138
  const onProviderChange = sinon.fake();
139
139
  const baseHost = "https://archive.org";
140
140
  const provider = new volumesProvider({
@@ -150,16 +150,16 @@ describe('Volumes Provider', () => {
150
150
 
151
151
  provider.sortVolumes("title_desc");
152
152
 
153
- expect(provider.sortOrderBy).to.equals("title_desc");
154
- expect(provider.actionButton).to.exist;
153
+ expect(provider.sortOrderBy).toEqual("title_desc");
154
+ expect(provider.actionButton).toBeDefined();
155
155
 
156
156
  const providerFileTitles = provider.viewableFiles.map(item => item.title);
157
157
  // use `.eql` for "lose equality" in order to deeply compare values.
158
- expect(providerFileTitles).to.eql([...descendingTitles]);
158
+ expect(providerFileTitles).toEqual([...descendingTitles]);
159
159
  });
160
160
 
161
161
  describe('Sorting icons', () => {
162
- it('has 3 icons', async () => {
162
+ test('has 3 icons', async () => {
163
163
  const onProviderChange = sinon.fake();
164
164
  const baseHost = "https://archive.org";
165
165
  const provider = new volumesProvider({
@@ -170,15 +170,15 @@ describe('Volumes Provider', () => {
170
170
  provider.sortOrderBy = 'default';
171
171
 
172
172
  const origSortButton = await fixture(provider.sortButton);
173
- expect(origSortButton.classList.contains('neutral-icon')).to.be.true;
173
+ expect(origSortButton.classList.contains('neutral-icon')).toBeTruthy();
174
174
 
175
175
  provider.sortOrderBy = 'title_asc';
176
176
  const ascButton = await fixture(provider.sortButton);
177
- expect(ascButton.classList.contains('asc-icon')).to.be.true;
177
+ expect(ascButton.classList.contains('asc-icon')).toBeTruthy();
178
178
 
179
179
  provider.sortOrderBy = 'title_desc';
180
180
  const descButton = await fixture(provider.sortButton);
181
- expect(descButton.classList.contains('desc-icon')).to.be.true;
181
+ expect(descButton.classList.contains('desc-icon')).toBeTruthy();
182
182
  });
183
183
  });
184
184
  });
@@ -1,11 +1,10 @@
1
1
  import {
2
2
  html,
3
3
  fixture,
4
- expect,
5
4
  fixtureCleanup,
6
- } from '@open-wc/testing';
5
+ } from '@open-wc/testing-helpers';
7
6
  import sinon from 'sinon';
8
- import '../../../../src/BookNavigator/volumes/volumes.js';
7
+ import '@/src/BookNavigator/volumes/volumes.js';
9
8
 
10
9
 
11
10
  const brOptions = {
@@ -58,30 +57,30 @@ afterEach(() => {
58
57
  });
59
58
 
60
59
  describe('<viewable-files>', () => {
61
- it('sets default properties', async () => {
60
+ test('sets default properties', async () => {
62
61
  const files = brOptions.options.multipleBooksList?.by_subprefix;
63
62
  const viewableFiles = Object.keys(files).map(item => files[item]);
64
63
  const el = await fixture(container(viewableFiles));
65
64
  await el.updateComplete;
66
65
 
67
- expect(el.viewableFiles).to.equal(viewableFiles);
68
- expect(el.viewableFiles.length).to.equal(3);
69
- expect(el.shadowRoot.querySelectorAll("ul li").length).to.equal(3);
66
+ expect(el.viewableFiles).toEqual(viewableFiles);
67
+ expect(el.viewableFiles.length).toEqual(3);
68
+ expect(el.shadowRoot.querySelectorAll("ul li").length).toEqual(3);
70
69
 
71
- expect(el.shadowRoot.querySelector(".item-title").innerText).to.include(`${viewableFiles[0].title}`);
70
+ expect(el.shadowRoot.querySelector(".item-title").textContent).toContain(`${viewableFiles[0].title}`);
72
71
  });
73
72
 
74
- it('render empty volumes', async () => {
73
+ test('render empty volumes', async () => {
75
74
  const viewableFiles = [];
76
75
  const el = await fixture(container(viewableFiles));
77
76
  await el.updateComplete;
78
77
 
79
- expect(el.viewableFiles).to.equal(viewableFiles);
80
- expect(el.viewableFiles.length).to.equal(0);
81
- expect(el.shadowRoot.childElementCount).to.equal(0);
78
+ expect(el.viewableFiles).toEqual(viewableFiles);
79
+ expect(el.viewableFiles.length).toEqual(0);
80
+ expect(el.shadowRoot.childElementCount).not.toEqual(0);
82
81
  });
83
82
 
84
- it('render active volume item set as first viewable item ', async () => {
83
+ test('render active volume item set as first viewable item ', async () => {
85
84
  const files = brOptions.options.multipleBooksList?.by_subprefix;
86
85
  const viewableFiles = Object.keys(files).map(item => files[item]);
87
86
  const prefix = viewableFiles[0].file_subprefix;
@@ -89,10 +88,10 @@ describe('<viewable-files>', () => {
89
88
  const el = await fixture(container(viewableFiles, prefix));
90
89
  await el.updateComplete;
91
90
 
92
- expect(el.viewableFiles).to.equal(viewableFiles);
93
- expect(el.viewableFiles.length).to.equal(3);
91
+ expect(el.viewableFiles).toEqual(viewableFiles);
92
+ expect(el.viewableFiles.length).toEqual(3);
94
93
 
95
- expect(el.shadowRoot.querySelectorAll("ul li div")[1].className).to.equal("content active");
94
+ expect(el.shadowRoot.querySelectorAll("ul li div")[1].className).toEqual("content active");
96
95
  });
97
96
 
98
97
  });
@@ -20,7 +20,7 @@ describe.skip('AbstractTTSEngine', () => {
20
20
  });
21
21
  });
22
22
 
23
- for (const dummyVoice of [dummyVoice, dummyVoiceUnderscores]) {
23
+ for (const dummyVoice of [dummyVoiceHyphens, dummyVoiceUnderscores]) {
24
24
  describe(`getBestBookVoice with BCP47 ${dummyVoice == dummyVoiceUnderscores ? '+' : '-'} underscores`, () => {
25
25
  const { getBestBookVoice } = AbstractTTSEngine;
26
26
 
@@ -130,7 +130,7 @@ export const DUMMY_TTS_ENGINE_OPTS = {
130
130
  * @param {SpeechSynthesisVoice}
131
131
  * @return {SpeechSynthesisVoice}
132
132
  **/
133
- function dummyVoice(overrides) {
133
+ function dummyVoiceHyphens(overrides) {
134
134
  return Object.assign({
135
135
  default: false,
136
136
  lang: "en-US",
@@ -147,7 +147,7 @@ function dummyVoice(overrides) {
147
147
  * @return {SpeechSynthesisVoice}
148
148
  **/
149
149
  function dummyVoiceUnderscores(overrides) {
150
- const voice = dummyVoice(overrides);
150
+ const voice = dummyVoiceHyphens(overrides);
151
151
  voice.lang = voice.lang.replace('-', '_');
152
152
  return voice;
153
153
  }
package/karma.conf.js DELETED
@@ -1,23 +0,0 @@
1
- const { createDefaultConfig } = require('@open-wc/testing-karma');
2
- const merge = require('deepmerge');
3
-
4
- module.exports = (config) => {
5
- config.set(
6
- merge(createDefaultConfig(config), {
7
- files: [
8
- // runs all files ending with .test in the test folder,
9
- // can be overwritten by passing a --grep flag. examples:
10
- //
11
- // npm run test -- --grep test/foo/bar.test.js
12
- // npm run test -- --grep test/bar/*
13
- { pattern: config.grep ? config.grep : 'tests/karma/**/*.test.js', type: 'module' },
14
- ],
15
-
16
- esm: {
17
- nodeResolve: true,
18
- },
19
- // you can overwrite/extend the config further
20
- }),
21
- );
22
- return config;
23
- };
@@ -1,57 +0,0 @@
1
- import {
2
- html,
3
- fixtureSync,
4
- expect,
5
- fixtureCleanup,
6
- } from '@open-wc/testing';
7
- import '../../../../src/BookNavigator/bookmarks/ia-bookmarks.js';
8
- import sinon from 'sinon';
9
-
10
- afterEach(() => {
11
- sinon.restore();
12
- fixtureCleanup();
13
- });
14
-
15
- describe('<ia-bookmarks>', () => {
16
- it('uses `setup` to start component', async () => {
17
- const el = fixtureSync(html`<ia-bookmarks></ia-bookmarks>`);
18
- await el.updateComplete;
19
-
20
- let fetchHappened = false;
21
- el.bookreader.bookId = 'foo';
22
- el.displayMode = 'bookmarks';
23
-
24
- el.fetchBookmarks = async () => {
25
- fetchHappened = true;
26
- return await Promise.resolve();
27
- };
28
-
29
- const fetchSpy = sinon.spy(el, 'fetchUserBookmarks');
30
-
31
- el.setup();
32
- await el.updateComplete;
33
-
34
- expect(fetchSpy.callCount).to.equal(1);
35
- expect(fetchHappened).to.equal(true);
36
- });
37
- it('does not fetch user bookmarks if displayMode = login', async () => {
38
- const el = fixtureSync(html`<ia-bookmarks></ia-bookmarks>`);
39
- await el.updateComplete;
40
-
41
- let fetchHappened = false;
42
- el.displayMode = 'login';
43
-
44
- el.fetchBookmarks = async () => {
45
- fetchHappened = true;
46
- return await Promise.resolve();
47
- };
48
-
49
- const fetchSpy = sinon.spy(el, 'fetchUserBookmarks');
50
-
51
- el.setup();
52
- await el.updateComplete;
53
-
54
- expect(fetchSpy.callCount).to.equal(0);
55
- expect(fetchHappened).to.equal(false);
56
- });
57
- });