From 086f446df6de15aa5e54f16b53888dcc1849ba08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hubert=20Figui=C3=A8re?= Date: Wed, 8 Oct 2014 10:33:05 -0400 Subject: [PATCH] Bug 1079349 - Some integration tests for search. --- apps/music/test/marionette/lib/music.js | 22 ++++ apps/music/test/marionette/search_test.js | 135 ++++++++++++++++++++++ 2 files changed, 157 insertions(+) create mode 100644 apps/music/test/marionette/search_test.js diff --git a/apps/music/test/marionette/lib/music.js b/apps/music/test/marionette/lib/music.js index 46a06e9ecabd..005a7dbdc54f 100644 --- a/apps/music/test/marionette/lib/music.js +++ b/apps/music/test/marionette/lib/music.js @@ -20,6 +20,16 @@ Music.Selector = Object.freeze({ songsTab: '#tabs-songs', albumsTab: '#tabs-albums', + // search fields + searchTiles: '#views-tiles-search', + searchTilesField: '#views-tiles-search-input', + searchList: '#views-list-search', + searchListField: '#views-list-search-input', + // search results + searchArtists: '#views-search-artists', + searchAlbums: '#views-search-albums', + searchTitles: '#views-search-titles', + viewsList: '#views-list-anchor', viewsSublist: '#views-sublist-anchor', firstSong: '.list-item', @@ -165,6 +175,18 @@ Music.prototype = { assert.equal(shouldBeShown, result); }, + searchTiles: function(searchTerm) { + this.client.helper.waitForElement(Music.Selector.searchTiles); + + var input = this.client.helper.waitForElement( + Music.Selector.searchTilesField); + assert.ok(input); + + input.clear(); + this.client.waitFor(input.displayed.bind(input)); + input.sendKeys(searchTerm); + }, + switchToSongsView: function() { this.songsTab.tap(); }, diff --git a/apps/music/test/marionette/search_test.js b/apps/music/test/marionette/search_test.js new file mode 100644 index 000000000000..cdc57ba9f279 --- /dev/null +++ b/apps/music/test/marionette/search_test.js @@ -0,0 +1,135 @@ +/* global require, marionette, setup, suite, test, __dirname */ +'use strict'; + +var assert = require('assert'); +var Music = require('./lib/music.js'); +var FakeRingtones = require('./lib/fakeringtones.js'); +var FakeControls = require('./lib/fakecontrols.js'); +/*var Statusbar = require('./lib/statusbar.js');*/ + +marionette('Music player search', function() { + var apps = {}; + apps[FakeRingtones.DEFAULT_ORIGIN] = __dirname + '/fakeringtones'; + apps[FakeControls.DEFAULT_ORIGIN] = __dirname + '/fakecontrols'; + + var client = marionette.client({ + prefs: { + 'device.storage.enabled': true, + 'device.storage.testing': true, + 'device.storage.prompt.testing': true + }, + + settings: { + 'lockscreen.enabled': false, + 'ftu.manifestURL': null + }, + + apps: apps + }); + + var music; + + setup(function() { + music = new Music(client); + + client.fileManager.removeAllFiles(); + client.fileManager.add([ + { + type: 'music', + filePath: 'apps/music/test-data/playlists/01.ogg' + }, + { + type: 'music', + filePath: 'apps/music/test-data/playlists/02.ogg' + }, + { + type: 'music', + filePath: 'apps/music/test-data/playlists/03.ogg' + }, + { + type: 'music', + filePath: 'apps/music/test-data/playlists/a.ogg' + }, + { + type: 'music', + filePath: 'apps/music/test-data/playlists/b.ogg' + }, + { + type: 'music', + filePath: 'apps/music/test-data/playlists/c.ogg' + }, + { + type: 'music', + filePath: 'apps/music/test-data/playlists/w.ogg' + }, + { + type: 'music', + filePath: 'apps/music/test-data/playlists/x.ogg' + }, + { + type: 'music', + filePath: 'apps/music/test-data/playlists/y.ogg' + } + ]); + }); + + suite('Search tests', function () { + + setup(function() { + music.launch(); + music.waitForFirstTile(); + + music.searchTiles('the'); + }); + + + + function testSearchResults(viewSelector, expectedCount) { + var view = client.helper.waitForElement(viewSelector); + assert.ok(view); + + // wait for the results to be displayed. + // XXX this mostly assume we populate before showing the div. + client.waitFor(function() { + return view.displayed(); + }); + + // since we display the count, just get it. + var count = view.findElement('.search-result-count').text(); + var results = view.findElement('.search-results'); + assert.ok(results); + + var resultsList = results.findElements('li.list-item', 'css selector'); + assert.ok(resultsList); + + // detect inconsistency. + assert.equal(resultsList.length, count); + // check what we expect. + assert.equal(count, expectedCount); + + return resultsList; + } + + test('Check simple search results in artists.', function() { + // check for the results in "artists" + var resultsList = testSearchResults(Music.Selector.searchArtists, 2); + + assert.equal(resultsList[1].findElement('.list-single-title').text(), + 'The NSA'); + assert.equal(resultsList[1].findElement('.search-highlight').text(), + 'The'); + }); + + test('Check simple search results in tracks.', function() { + // check for the results in "artists" + var resultsList = testSearchResults(Music.Selector.searchTitles, 1); + + assert.equal(resultsList[0].findElement('.list-main-title').text(), + 'The Ecuadorian Embassy'); + assert.equal(resultsList[0].findElement('.search-highlight').text(), + 'The'); + }); + + }); + +});