Skip to content

[BUGFIX] fix for 404 after switching classes #706

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 24, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions app/adapters/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,17 @@ export default JSONAPIAdapter.extend({

ids: null,

shouldReloadRecord(store, { modelName, id }) {
if (modelName === 'project') {
this.currentProject = id;
} else if (modelName === 'project-version') {
this.currentProjectVersion = id;
}
return; // return undefined so auto determinated
},
shouldBackgroundReloadAll() { return false; },
shouldBackgroundReloadRecord(store, snapshot) {
let key = `${snapshot.modelName}-${snapshot.id}`;
shouldBackgroundReloadRecord(store, { modelName, id }) {
let key = `${modelName}-${id}`;
let hasId = this.ids[key];
if (!hasId) {
this.ids[key] = true;
Expand All @@ -33,7 +41,7 @@ export default JSONAPIAdapter.extend({
this.ids = {};
},

async findRecord(store, {modelName}, id) {
async findRecord(store, { modelName }, id) {
let url;
let host = this.host;
let projectName = this.currentProject;
Expand All @@ -49,7 +57,7 @@ export default JSONAPIAdapter.extend({
modelNameToUse = 'namespace';
}

if (typeof revId != 'undefined') {
if (typeof revId !== 'undefined') {
let encodedRevId = encodeURIComponent(revId);
url = `json-docs/${projectName}/${version}/${pluralize(modelNameToUse)}/${encodedRevId}`;
} else {
Expand All @@ -60,9 +68,10 @@ export default JSONAPIAdapter.extend({
let revId = this.metaStore.getRevId(projectName, version, modelName, id);
url = `json-docs/${projectName}/${version}/${pluralize(modelName)}/${revId}`;
} else if (modelName === 'project') {
this.set('currentProject', id);
this.currentProject = id;
url = `rev-index/${id}`;
} else if (modelName === 'project-version') {
this.currentProjectVersion = id;
url = `rev-index/${id}`;
} else {
throw new Error('Unexpected model lookup');
Expand Down
1 change: 0 additions & 1 deletion app/instance-initializers/ember-meta-store.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ export function initialize(appInstance) {
const {availableProjectVersions, projectRevMap} = shoebox.retrieve('meta-store');
metaStore.initializeStore(availableProjectVersions, projectRevMap);
}

}

export default {
Expand Down
50 changes: 37 additions & 13 deletions tests/acceptance/switch-project-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,38 +5,62 @@ import {
click,
findAll,
find,
currentURL,
settled
} from '@ember/test-helpers';
import { selectSearch } from 'ember-power-select/test-support';
import { timeout } from 'ember-concurrency';

async function waitForSettled() {
await settled();
await timeout(10);
await settled();
}

async function ensureVersionsExist(assert) {
await waitForSettled();
await selectSearch('.select-container', '2');
await settled();

assert.dom('.ember-power-select-options').exists({ count: 1 });
assert.ok(findAll('.ember-power-select-options')[0].children.length > 1);
}

module('Acceptance | Switch Project', function(hooks) {
setupApplicationTest(hooks);

test('Can switch projects back and forth', async function(assert) {
async function ensureVersionsExist() {
await settled();
await timeout(10);
await settled();
await selectSearch('.select-container', '2');
await settled();

assert.dom('.ember-power-select-options').exists({ count: 1 });
assert.ok(findAll('.ember-power-select-options')[0].children.length > 1);
}

await visit('/');

await click('.spec-ember-data');
await ensureVersionsExist();
await ensureVersionsExist(assert);
assert.dom(find('.spec-ember-data')).hasClass('active');

await click('.spec-ember');
await ensureVersionsExist();
await ensureVersionsExist(assert);
assert.dom(find('.spec-ember')).hasClass('active');

await click('.spec-ember-data');
await ensureVersionsExist();
await ensureVersionsExist(assert);
assert.dom(find('.spec-ember-data')).hasClass('active');
});

test('Can open class after switching projects back and forth', async function(assert) {
await visit('/');
await ensureVersionsExist(assert);
assert.dom(find('.spec-ember')).hasClass('active');

await click('.spec-ember-data');
await ensureVersionsExist(assert);
assert.dom(find('.spec-ember-data')).hasClass('active');

await click('.spec-ember');
await ensureVersionsExist(assert);
assert.dom(find('.spec-ember')).hasClass('active');

await click('[data-test-class=EmberObject] > a');
await waitForSettled();
assert.equal(currentURL(), '/ember/release/classes/EmberObject');
});
});