Skip to content

Commit

Permalink
add basic bookmak plugin test
Browse files Browse the repository at this point in the history
  • Loading branch information
ronny1982 committed Sep 24, 2023
1 parent 6ef7cda commit 51908fd
Showing 1 changed file with 85 additions and 1 deletion.
86 changes: 85 additions & 1 deletion web/src/engine/providers/BookmarkPlugin_test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { mock } from 'jest-mock-extended';
import type { IMediaChild, IMediaContainer } from './MediaPlugin';
import { Bookmark } from './BookmarkPlugin';
import { Bookmark, BookmarkPlugin } from './BookmarkPlugin';
import type { IMediaInfoTracker } from '../trackers/IMediaInfoTracker';
import { Store, type StorageController } from '../StorageController';
import type { PluginController } from '../PluginController';

class TestFixture {

Expand Down Expand Up @@ -132,4 +134,86 @@ describe('Bookmark', () => {
expect(fixture.MockParent.CreateEntry).toHaveBeenCalledWith(testee.Identifier, testee.Title);
});
});
});

describe('BookmarkPlugin', () => {

describe('Constructor', () => {

test('Should load bookmarks from persitent storage', async () => {
const mockStorageController = mock<StorageController>();
mockStorageController.LoadPersistent.calledWith(Store.Bookmarks, undefined).mockReturnValue(Promise.resolve([
{
Created: 1,
Updated: 2,
Title: 'Bookmark ✔️',
Media: {
ProviderID: 'website-exists',
EntryID: 'website-exists/manga'
},
Info: {
ProviderID: 'tracker-exists',
EntryID: 'tracker-exists/manga'
},
LastKnownEntries: {
IdentifierHashes: [],
TitleHashes: []
},
}, // as BookmarkSerialized
{
Created: 3,
Updated: 4,
Title: 'Bookmark ❌',
Media: {
ProviderID: 'website-missing',
EntryID: 'website-missing/manga'
},
Info: {
ProviderID: 'tracker-missing',
EntryID: 'tracker-missing/manga'
},
LastKnownEntries: {
IdentifierHashes: [],
TitleHashes: []
},
}, // as BookmarkSerialized
]));
const mockPluginController = mock<PluginController>();
Object.defineProperty(mockPluginController, 'WebsitePlugins', { get: () => [
{
Identifier: 'website-exists',
Title: 'Website (exists)',
} as IMediaContainer
] });
Object.defineProperty(mockPluginController, 'InfoTrackers', { get: () => [
{
Identifier: 'tracker-exists',
Title: 'Tracker (exists)',
} as IMediaInfoTracker
] });

let updatedEntries: Bookmark[];
const testee = new BookmarkPlugin(mockStorageController, mockPluginController);
testee.EntriesUpdated.Subscribe((_, args) => updatedEntries = args);
await new Promise(resolve => setTimeout(resolve, 50));

expect(testee.Entries).toBe(updatedEntries);
expect(testee.Entries.length).toBe(2);

expect(testee.Entries[0].Title).toBe('Bookmark ✔️');
expect(testee.Entries[0].Identifier).toBe('website-exists/manga');
expect(testee.Entries[0].Parent.Identifier).toBe('website-exists');
expect(testee.Entries[0].Parent.Title).toBe('Website (exists)');
expect(testee.Entries[0].Tracker.Identifier).toBe('tracker-exists');
expect(testee.Entries[0].Tracker.Title).toBe('Tracker (exists)');
expect(testee.Entries[0].InfoID).toBe('tracker-exists/manga');

expect(testee.Entries[1].Title).toBe('Bookmark ❌');
expect(testee.Entries[1].Identifier).toBe('website-missing/manga');
expect(testee.Entries[1].Parent.Identifier).toBe('website-missing');
expect(testee.Entries[1].Parent.Title).toBe('website-missing');
expect(testee.Entries[1].Tracker).toBeUndefined();
expect(testee.Entries[1].InfoID).toBe('tracker-missing/manga');
});
});
});

0 comments on commit 51908fd

Please sign in to comment.