diff --git a/packages/desktop-gui/cypress/fixtures/browsers.json b/packages/desktop-gui/cypress/fixtures/browsers.json index ab23c806ec86..9c35e47462de 100644 --- a/packages/desktop-gui/cypress/fixtures/browsers.json +++ b/packages/desktop-gui/cypress/fixtures/browsers.json @@ -3,6 +3,7 @@ "name": "chrome", "displayName": "Chrome", "family": "chromium", + "channel": "stable", "version": "50.0.2661.86", "path": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", "majorVersion": "50" @@ -11,6 +12,7 @@ "name": "chromium", "displayName": "Chromium", "family": "chromium", + "channel": "stable", "version": "49.0.2609.0", "path": "/Users/bmann/Downloads/chrome-mac/Chromium.app/Contents/MacOS/Chromium", "majorVersion": "49" @@ -19,6 +21,7 @@ "name": "chrome", "displayName": "Canary", "family": "chromium", + "channel": "canary", "version": "48.0", "path": "/Users/bmann/Downloads/chrome-mac/Canary.app/Contents/MacOS/Canary", "majorVersion": "48" diff --git a/packages/desktop-gui/cypress/fixtures/config.json b/packages/desktop-gui/cypress/fixtures/config.json index 5da0c8d3e099..3444f9b52480 100644 --- a/packages/desktop-gui/cypress/fixtures/config.json +++ b/packages/desktop-gui/cypress/fixtures/config.json @@ -7,6 +7,7 @@ "name": "chrome", "displayName": "Chrome", "family": "chromium", + "channel": "stable", "version": "78.0.3904.108", "path": "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", "majorVersion": "78" @@ -15,6 +16,7 @@ "name": "chromium", "displayName": "Chromium", "family": "chromium", + "channel": "stable", "version": "74.0.3729.0", "path": "/Applications/Chromium.app/Contents/MacOS/Chromium", "majorVersion": "74" @@ -23,6 +25,7 @@ "name": "chrome", "displayName": "Canary", "family": "chromium", + "channel": "canary", "version": "80.0.3977.4", "path": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary", "majorVersion": "80" @@ -31,6 +34,7 @@ "name": "edge", "displayName": "Edge", "family": "chromium", + "channel": "stable", "version": "79.0.309.71", "path": "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", "majorVersion": "79" @@ -39,6 +43,7 @@ "name": "edge", "displayName": "Edge Beta", "family": "chromium", + "channel": "beta", "version": "79.0.309.71", "path": "/Applications/Microsoft Edge Beta.app/Contents/MacOS/Microsoft Edge Beta", "majorVersion": "79" @@ -47,6 +52,7 @@ "name": "edge", "displayName": "Edge Canary", "family": "chromium", + "channel": "canary", "version": "79.0.309.71", "path": "/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary", "majorVersion": "79" @@ -55,6 +61,7 @@ "name": "edge", "displayName": "Edge Dev", "family": "chromium", + "channel": "dev", "version": "79.0.309.71", "path": "/Applications/Microsoft Edge Dev.app/Contents/MacOS/Microsoft Edge Dev", "majorVersion": "79" @@ -63,6 +70,7 @@ "name": "electron", "displayName": "Electron", "family": "chromium", + "channel": "stable", "version": "73.0.3683.121", "path": "", "majorVersion": "73", @@ -72,6 +80,7 @@ "name": "firefox", "displayName": "Firefox", "family": "firefox", + "channel": "stable", "version": "69.0.1", "path": "/Applications/Firefox/Contents/MacOS/Firefox", "majorVersion": "69" @@ -79,6 +88,7 @@ { "name": "firefox", "displayName": "Firefox Developer Edition", + "channel": "dev", "family": "firefox", "version": "69.0.1", "path": "/Applications/Firefox Developer/Contents/MacOS/Firefox Developer", @@ -87,6 +97,7 @@ { "name": "firefox", "displayName": "Firefox Nightly", + "channel": "beta", "family": "firefox", "version": "69.0.1", "path": "/Applications/Firefox Nightly/Contents/MacOS/Firefox Nightly", @@ -96,6 +107,7 @@ { "name": "custom", "displayName": "Custom", + "channel": "dev", "family": "custom", "version": "4.3.2", "path": "/Applications/Custom/Contents/MacOS/Custom", diff --git a/packages/desktop-gui/cypress/integration/project_nav_spec.js b/packages/desktop-gui/cypress/integration/project_nav_spec.js index 9d30d4535058..bfec68f1a7c2 100644 --- a/packages/desktop-gui/cypress/integration/project_nav_spec.js +++ b/packages/desktop-gui/cypress/integration/project_nav_spec.js @@ -215,7 +215,7 @@ describe('Project Nav', function () { }) it('saves chosen browser in local storage', () => { - expect(localStorage.getItem('chosenBrowser')).to.eq('chromium') + expect(localStorage.getItem('chosenBrowser')).to.eq(JSON.stringify({ name: 'chromium', channel: 'stable' })) }) }) @@ -318,25 +318,42 @@ describe('Project Nav', function () { }) describe('local storage saved browser', function () { - beforeEach(function () { - localStorage.setItem('chosenBrowser', 'chromium') + afterEach(() => { + cy.clearLocalStorage() + }) + + it('displays chosen browser in localStorage', function () { + // deliberately not the default 'chrome' browser + // @see https://github.com/cypress-io/cypress/issues/8281 + localStorage.setItem('chosenBrowser', JSON.stringify({ + name: 'chrome', + channel: 'canary', + })) this.openProject.resolve(this.config) - }) - afterEach(() => { - cy.clearLocalStorage() + cy.get('.browsers-list .dropdown-chosen') + .should('contain', 'Canary').and('not.contain', 'Edge') + .get('.dropdown-chosen .browser-icon') + .should('have.attr', 'src').and('include', './img/chrome-canary') }) - it('displays local storage browser name in chosen', () => { + it('displays chosen browser with old string-style id in localStorage', function () { + localStorage.setItem('chosenBrowser', 'chrome') + + this.openProject.resolve(this.config) + cy.get('.browsers-list .dropdown-chosen') - .should('contain', 'Chromium') + .should('contain', 'Chrome') }) - it('displays local storage browser icon in chosen', () => { - cy.get('.browsers-list .dropdown-chosen .browser-icon') - .should('have.attr', 'src') - .and('include', './img/chromium') + it('displays default browser with null localStorage', function () { + localStorage.removeItem('chosenBrowser') + + this.openProject.resolve(this.config) + + cy.get('.browsers-list .dropdown-chosen') + .should('contain', this.config.browsers[0].displayName) }) }) diff --git a/packages/desktop-gui/src/project-nav/browsers.jsx b/packages/desktop-gui/src/project-nav/browsers.jsx index dbc76d94eabd..bdad60a1b4ee 100644 --- a/packages/desktop-gui/src/project-nav/browsers.jsx +++ b/packages/desktop-gui/src/project-nav/browsers.jsx @@ -77,7 +77,6 @@ export default class Browsers extends Component { {browser.family === 'firefox' && beta} {this._info(browser)} {this._warn(browser)} - ) } diff --git a/packages/desktop-gui/src/project/project-model.js b/packages/desktop-gui/src/project/project-model.js index 7301d0eb9728..eadb7105f333 100644 --- a/packages/desktop-gui/src/project/project-model.js +++ b/packages/desktop-gui/src/project/project-model.js @@ -180,8 +180,10 @@ export default class Project { return this.setChosenBrowser(customBrowser, { save: false }) } - if (localStorage.getItem('chosenBrowser')) { - return this.setChosenBrowserByName(localStorage.getItem('chosenBrowser')) + const ls = localStorage.getItem('chosenBrowser') + + if (ls) { + return this.setChosenBrowserFromLocalStorage(ls) } return this.setChosenBrowser(this.defaultBrowser) @@ -194,7 +196,7 @@ export default class Project { }) if (save !== false) { - localStorage.setItem('chosenBrowser', browser.name) + localStorage.setItem('chosenBrowser', JSON.stringify(_.pick(browser, 'name', 'channel'))) } browser.isChosen = true @@ -250,8 +252,17 @@ export default class Project { this.apiError = err } - @action setChosenBrowserByName (name) { - const browser = _.find(this.browsers, { name }) || this.defaultBrowser + @action setChosenBrowserFromLocalStorage (ls) { + let filter = {} + + try { + _.merge(filter, JSON.parse(ls)) + } catch (err) { + // localStorage pre-dates JSON filter, assume "name" + filter.name = ls + } + + const browser = _.find(this.browsers, filter) || this.defaultBrowser this.setChosenBrowser(browser) }