QUnit.module( 'ext.echo.dm - SourcePagesModel', () => { // Mock partial API response we feed into the model const sources = { local: { pages: [ { ns: 2, title: 'User:Admin', unprefixed: 'Admin', pages: [ 'User:Admin', 'User talk:Admin', null, ], count: 24, }, { ns: 2, title: 'User:RandomUser', unprefixed: 'RandomUser', pages: [ 'User:RandomUser', 'User talk:RandomUser', ], count: 6, }, { ns: 0, title: 'Moai', unprefixed: 'Moai', pages: [ 'Moai', 'Talk:Moai', ], count: 3, }, ], totalCount: 33, source: { title: 'LocalWiki', url: 'http://dev.wiki.local.wmftest.net:8080/w/api.php', base: 'http://dev.wiki.local.wmftest.net:8080/wiki/$1', }, }, hewiki: { pages: [ { ns: 2, title: 'Foo', unprefixed: 'Foo', pages: [ 'Foo', 'Talk:Foo', null, ], count: 10, }, { ns: 0, title: 'User:Bar', unprefixed: 'Bar', pages: [ 'User:Bar', 'User talk:Bar', ], count: 5, }, ], totalCount: 15, source: { title: 'Hebrew Wikipedia', url: 'http://he.wiki.local.wmftest.net:8080/w/api.php', base: 'http://he.wiki.local.wmftest.net:8080/wiki/$1', }, }, }; QUnit.test( 'Creating source-page map', ( assert ) => { const model = new mw.echo.dm.SourcePagesModel(); model.setAllSources( sources ); assert.strictEqual( model.getCurrentSource(), 'local', 'Default source is local', ); assert.strictEqual( model.getCurrentPage(), null, 'Default page is null', ); assert.deepEqual( model.getSourcesArray(), [ 'local', 'hewiki' ], 'Source array includes all sources', ); assert.strictEqual( model.getSourceTitle( 'hewiki' ), 'Hebrew Wikipedia', 'Source title', ); assert.strictEqual( model.getSourceTotalCount( 'hewiki' ), 15, 'Source total count', ); assert.deepEqual( model.getSourcePages( 'local' ), { Moai: { count: 3, ns: 0, pages: [ 'Moai', 'Talk:Moai', ], title: 'Moai', unprefixed: 'Moai', }, 'User:Admin': { count: 24, ns: 2, pages: [ 'User:Admin', 'User talk:Admin', null, ], title: 'User:Admin', unprefixed: 'Admin', }, 'User:RandomUser': { count: 6, ns: 2, pages: [ 'User:RandomUser', 'User talk:RandomUser', ], title: 'User:RandomUser', unprefixed: 'RandomUser', }, }, 'Outputting source pages', ); assert.deepEqual( model.getGroupedPagesForTitle( 'local', 'User:Admin' ), [ 'User:Admin', 'User talk:Admin', null, ], 'Grouped pages per title', ); // Change source model.setCurrentSourcePage( 'hewiki', 'User:Bar' ); assert.strictEqual( model.getCurrentSource(), 'hewiki', 'Source changed successfully', ); assert.strictEqual( model.getCurrentPage(), 'User:Bar', 'Page changed successfully', ); } ); } );