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',
		);

	} );
} );
