Add acceptance tests for all mobile templates

This commit is contained in:
Robin Ward 2016-05-05 12:49:12 -04:00
parent 22d7ea1192
commit 0fcfc6bed9
No known key found for this signature in database
GPG Key ID: 0E091E2B4ED1B83D
9 changed files with 78 additions and 29 deletions

View File

@ -39,7 +39,6 @@ function parseName(fullName) {
} }
export default Ember.DefaultResolver.extend({ export default Ember.DefaultResolver.extend({
parseName: parseName, parseName: parseName,
normalize(fullName) { normalize(fullName) {

View File

@ -1,6 +1,6 @@
import Mobile from 'discourse/lib/mobile'; import Mobile from 'discourse/lib/mobile';
// Initializes the `Mobile` helper object. // Initializes the `Mobile` helper object.
export default { export default {
name: 'mobile', name: 'mobile',
after: 'inject-objects', after: 'inject-objects',
@ -16,4 +16,3 @@ export default {
app.registry.resolver.__resolver__.mobileView = Mobile.mobileView; app.registry.resolver.__resolver__.mobileView = Mobile.mobileView;
} }
}; };

View File

@ -1,3 +1,5 @@
let mobileForced = false;
// An object that is responsible for logic related to mobile devices. // An object that is responsible for logic related to mobile devices.
const Mobile = { const Mobile = {
isMobileDevice: false, isMobileDevice: false,
@ -5,8 +7,10 @@ const Mobile = {
init() { init() {
const $html = $('html'); const $html = $('html');
this.isMobileDevice = $html.hasClass('mobile-device'); this.isMobileDevice = mobileForced || $html.hasClass('mobile-device');
this.mobileView = $html.hasClass('mobile-view'); this.mobileView = mobileForced || $html.hasClass('mobile-view');
if (mobileForced) { return; }
try{ try{
if (window.location.search.match(/mobile_view=1/)){ if (window.location.search.match(/mobile_view=1/)){
@ -27,8 +31,8 @@ const Mobile = {
} }
}, },
toggleMobileView: function() { toggleMobileView() {
try{ try {
if (localStorage) { if (localStorage) {
localStorage.mobileView = !this.mobileView; localStorage.mobileView = !this.mobileView;
} }
@ -38,11 +42,19 @@ const Mobile = {
this.reloadPage(!this.mobileView); this.reloadPage(!this.mobileView);
}, },
reloadPage: function(mobile) { reloadPage(mobile) {
window.location.assign(window.location.pathname + '?mobile_view=' + (mobile ? '1' : '0')); window.location.assign(window.location.pathname + '?mobile_view=' + (mobile ? '1' : '0'));
} }
}; };
export function forceMobile() {
mobileForced = true;
}
export function resetMobile() {
mobileForced = false;
}
// Backwards compatibiltity, deprecated // Backwards compatibiltity, deprecated
Object.defineProperty(Discourse, 'Mobile', { Object.defineProperty(Discourse, 'Mobile', {
get: function() { get: function() {

View File

@ -0,0 +1,11 @@
{{user-info user=item.user}}
{{user-stat value=item.likes_received label="directory.likes_received" icon="heart"}}
{{user-stat value=item.likes_given label="directory.likes_given" icon="heart"}}
{{user-stat value=item.topic_count label="directory.topic_count"}}
{{user-stat value=item.post_count label="directory.post_count"}}
{{user-stat value=item.topics_entered label="directory.topics_entered"}}
{{user-stat value=item.posts_read label="directory.posts_read"}}
{{user-stat value=item.days_visited label="directory.days_visited"}}
{{#if showTimeRead}}
<div class='time-read'>{{unbound item.time_read}}</div>
{{/if}}

View File

@ -9,24 +9,9 @@
{{#conditional-loading-spinner condition=model.loading}} {{#conditional-loading-spinner condition=model.loading}}
{{#if model.length}} {{#if model.length}}
<div class='total-rows'>{{i18n "directory.total_rows" count=model.totalRows}}</div> <div class='total-rows'>{{i18n "directory.total_rows" count=model.totalRows}}</div>
{{#each model as |item|}}
{{#each model itemController="directory-item"}} {{directory-item tagName="div" class="user" item=item showTimeRead=showTimeRead}}
<div class="user {{if ic.me 'me'}}"> {{/each}}
{{#with ic.model as |it|}}
{{user-info user=it.user}}
{{user-stat value=it.likes_received label="directory.likes_received" icon="heart"}}
{{user-stat value=it.likes_given label="directory.likes_given" icon="heart"}}
{{user-stat value=it.topic_count label="directory.topic_count"}}
{{user-stat value=it.post_count label="directory.post_count"}}
{{user-stat value=it.topics_entered label="directory.topics_entered"}}
{{user-stat value=it.posts_read label="directory.posts_read"}}
{{user-stat value=it.days_visited label="directory.days_visited"}}
{{#if showTimeRead}}
<div class='time-read'>{{unbound it.time_read}}</div>
{{/if}}
{{/with}}
</div>
{{/each}}
{{conditional-loading-spinner condition=model.loadingMore}} {{conditional-loading-spinner condition=model.loadingMore}}
{{else}} {{else}}

View File

@ -0,0 +1,15 @@
import { acceptance } from "helpers/qunit-helpers";
acceptance("Topic Discovery - Mobile", { mobileView: true });
test("Visit Discovery Pages", () => {
visit("/");
andThen(() => {
ok(exists(".topic-list"), "The list of topics was rendered");
ok(exists('.topic-list .topic-list-item'), "has topics");
});
visit("/categories");
andThen(() => {
ok(exists('.category'), "has a list of categories");
});
});

View File

@ -0,0 +1,11 @@
import { acceptance } from "helpers/qunit-helpers";
acceptance("Signing In - Mobile", { mobileView: true });
test("sign in", () => {
visit("/");
click("header .login-button");
andThen(() => {
ok(exists('#login-form'), "it shows the login modal");
});
});

View File

@ -0,0 +1,10 @@
import { acceptance } from "helpers/qunit-helpers";
acceptance("User Directory - Mobile", { mobileView: true });
test("Visit Page", () => {
visit("/users");
andThen(() => {
ok(exists('.directory .user'), "has a list of users");
});
});

View File

@ -3,6 +3,7 @@
import sessionFixtures from 'fixtures/session-fixtures'; import sessionFixtures from 'fixtures/session-fixtures';
import siteFixtures from 'fixtures/site-fixtures'; import siteFixtures from 'fixtures/site-fixtures';
import HeaderComponent from 'discourse/components/site-header'; import HeaderComponent from 'discourse/components/site-header';
import { forceMobile, resetMobile } from 'discourse/lib/mobile';
function currentUser() { function currentUser() {
return Discourse.User.create(sessionFixtures['/session/current.json'].current_user); return Discourse.User.create(sessionFixtures['/session/current.json'].current_user);
@ -36,19 +37,25 @@ var oldAvatar = Discourse.Utilities.avatarImg;
function acceptance(name, options) { function acceptance(name, options) {
module("Acceptance: " + name, { module("Acceptance: " + name, {
setup: function() { setup() {
resetMobile();
// Don't render avatars in acceptance tests, it's faster and no 404s // Don't render avatars in acceptance tests, it's faster and no 404s
Discourse.Utilities.avatarImg = () => ""; Discourse.Utilities.avatarImg = () => "";
// For now don't do scrolling stuff in Test Mode // For now don't do scrolling stuff in Test Mode
HeaderComponent.reopen({examineDockHeader: Ember.K}); HeaderComponent.reopen({examineDockHeader: Ember.K});
var siteJson = siteFixtures['site.json'].site; const siteJson = siteFixtures['site.json'].site;
if (options) { if (options) {
if (options.setup) { if (options.setup) {
options.setup.call(this); options.setup.call(this);
} }
if (options.mobileView) {
forceMobile();
}
if (options.loggedIn) { if (options.loggedIn) {
logIn(); logIn();
} }
@ -65,7 +72,7 @@ function acceptance(name, options) {
Discourse.reset(); Discourse.reset();
}, },
teardown: function() { teardown() {
if (options && options.teardown) { if (options && options.teardown) {
options.teardown.call(this); options.teardown.call(this);
} }