Skip to content

Commit ddebc7b

Browse files
authored
Merge pull request #706 from ember-learn/issue_404
[BUGFIX] fix for 404 after switching classes
2 parents 8e9acef + ccb0264 commit ddebc7b

File tree

3 files changed

+51
-19
lines changed

3 files changed

+51
-19
lines changed

app/adapters/application.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,17 @@ export default JSONAPIAdapter.extend({
1818

1919
ids: null,
2020

21+
shouldReloadRecord(store, { modelName, id }) {
22+
if (modelName === 'project') {
23+
this.currentProject = id;
24+
} else if (modelName === 'project-version') {
25+
this.currentProjectVersion = id;
26+
}
27+
return; // return undefined so auto determinated
28+
},
2129
shouldBackgroundReloadAll() { return false; },
22-
shouldBackgroundReloadRecord(store, snapshot) {
23-
let key = `${snapshot.modelName}-${snapshot.id}`;
30+
shouldBackgroundReloadRecord(store, { modelName, id }) {
31+
let key = `${modelName}-${id}`;
2432
let hasId = this.ids[key];
2533
if (!hasId) {
2634
this.ids[key] = true;
@@ -33,7 +41,7 @@ export default JSONAPIAdapter.extend({
3341
this.ids = {};
3442
},
3543

36-
async findRecord(store, {modelName}, id) {
44+
async findRecord(store, { modelName }, id) {
3745
let url;
3846
let host = this.host;
3947
let projectName = this.currentProject;
@@ -49,7 +57,7 @@ export default JSONAPIAdapter.extend({
4957
modelNameToUse = 'namespace';
5058
}
5159

52-
if (typeof revId != 'undefined') {
60+
if (typeof revId !== 'undefined') {
5361
let encodedRevId = encodeURIComponent(revId);
5462
url = `json-docs/${projectName}/${version}/${pluralize(modelNameToUse)}/${encodedRevId}`;
5563
} else {
@@ -60,9 +68,10 @@ export default JSONAPIAdapter.extend({
6068
let revId = this.metaStore.getRevId(projectName, version, modelName, id);
6169
url = `json-docs/${projectName}/${version}/${pluralize(modelName)}/${revId}`;
6270
} else if (modelName === 'project') {
63-
this.set('currentProject', id);
71+
this.currentProject = id;
6472
url = `rev-index/${id}`;
6573
} else if (modelName === 'project-version') {
74+
this.currentProjectVersion = id;
6675
url = `rev-index/${id}`;
6776
} else {
6877
throw new Error('Unexpected model lookup');

app/instance-initializers/ember-meta-store.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ export function initialize(appInstance) {
1212
const {availableProjectVersions, projectRevMap} = shoebox.retrieve('meta-store');
1313
metaStore.initializeStore(availableProjectVersions, projectRevMap);
1414
}
15-
1615
}
1716

1817
export default {

tests/acceptance/switch-project-test.js

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,62 @@ import {
55
click,
66
findAll,
77
find,
8+
currentURL,
89
settled
910
} from '@ember/test-helpers';
1011
import { selectSearch } from 'ember-power-select/test-support';
1112
import { timeout } from 'ember-concurrency';
1213

14+
async function waitForSettled() {
15+
await settled();
16+
await timeout(10);
17+
await settled();
18+
}
19+
20+
async function ensureVersionsExist(assert) {
21+
await waitForSettled();
22+
await selectSearch('.select-container', '2');
23+
await settled();
24+
25+
assert.dom('.ember-power-select-options').exists({ count: 1 });
26+
assert.ok(findAll('.ember-power-select-options')[0].children.length > 1);
27+
}
28+
1329
module('Acceptance | Switch Project', function(hooks) {
1430
setupApplicationTest(hooks);
1531

1632
test('Can switch projects back and forth', async function(assert) {
17-
async function ensureVersionsExist() {
18-
await settled();
19-
await timeout(10);
20-
await settled();
21-
await selectSearch('.select-container', '2');
22-
await settled();
23-
24-
assert.dom('.ember-power-select-options').exists({ count: 1 });
25-
assert.ok(findAll('.ember-power-select-options')[0].children.length > 1);
26-
}
2733

2834
await visit('/');
2935

3036
await click('.spec-ember-data');
31-
await ensureVersionsExist();
37+
await ensureVersionsExist(assert);
3238
assert.dom(find('.spec-ember-data')).hasClass('active');
3339

3440
await click('.spec-ember');
35-
await ensureVersionsExist();
41+
await ensureVersionsExist(assert);
3642
assert.dom(find('.spec-ember')).hasClass('active');
3743

3844
await click('.spec-ember-data');
39-
await ensureVersionsExist();
45+
await ensureVersionsExist(assert);
4046
assert.dom(find('.spec-ember-data')).hasClass('active');
4147
});
48+
49+
test('Can open class after switching projects back and forth', async function(assert) {
50+
await visit('/');
51+
await ensureVersionsExist(assert);
52+
assert.dom(find('.spec-ember')).hasClass('active');
53+
54+
await click('.spec-ember-data');
55+
await ensureVersionsExist(assert);
56+
assert.dom(find('.spec-ember-data')).hasClass('active');
57+
58+
await click('.spec-ember');
59+
await ensureVersionsExist(assert);
60+
assert.dom(find('.spec-ember')).hasClass('active');
61+
62+
await click('[data-test-class=EmberObject] > a');
63+
await waitForSettled();
64+
assert.equal(currentURL(), '/ember/release/classes/EmberObject');
65+
});
4266
});

0 commit comments

Comments
 (0)