Skip to content

Commit

Permalink
fix handling of login errors in the dummy app
Browse files Browse the repository at this point in the history
  • Loading branch information
marcoow committed Apr 7, 2020
1 parent da69fcb commit f42dc8e
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 26 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
"ember-sinon": "~5.0.0",
"ember-source": "~3.17.0",
"ember-source-channel-url": "^1.1.0",
"ember-test-selectors": "^4.0.0",
"ember-try": "^1.1.0",
"eslint": "^5.16.0",
"eslint-config-simplabs": "^0.4.0",
Expand Down
31 changes: 31 additions & 0 deletions tests/acceptance/authentication-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { tryInvoke } from '@ember/utils';
import {
currentURL,
visit,
fillIn,
click
} from '@ember/test-helpers';
import hasEmberVersion from 'ember-test-helpers/has-ember-version';
Expand All @@ -28,6 +29,36 @@ describe('Acceptance: Authentication', function() {
tryInvoke(server, 'shutdown');
});

it('logging in with correct credentials works', async function() {
server = new Pretender(function() {
this.post(`${config.apiHost}/token`, () => [200, { 'Content-Type': 'application/json' }, '{ "access_token": "secret token!", "account_id": 1 }']);
this.get(`${config.apiHost}/accounts/1`, () => [200, { 'Content-Type': 'application/json' }, '{ "data": { "type": "accounts", "id": "1", "attributes": { "login": "letme", "name": "Some person" } } }']);
});

await invalidateSession();
await visit('/login');
await fillIn('[data-test-identification]', 'identification');
await fillIn('[data-test-password]', 'password');
await click('button[type="submit"]');

expect(currentURL()).to.eq('/');
});

it('logging in with incorrect credentials shows an error', async function() {
server = new Pretender(function() {
this.post(`${config.apiHost}/token`, () => [400, { 'Content-Type': 'application/json' }, '{ "error": "invalid_grant" }']);
});

await invalidateSession();
await visit('/login');
await fillIn('[data-test-identification]', 'identification');
await fillIn('[data-test-password]', 'wrong-password!');
await click('button[type="submit"]');

expect(currentURL()).to.eq('/login');
expect(document.querySelector('[data-test-error-message]')).to.exist;
});

describe('the protected route', function() {
if (!hasEmberVersion(2, 4)) {
// guard against running test module on unsupported version (before 2.4)
Expand Down
5 changes: 3 additions & 2 deletions tests/dummy/app/components/login-form.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ export default Component.extend({
if (this.rememberMe) {
this.get('session').set('store.cookieExpirationTime', 60 * 60 * 24 * 14);
}
} catch (reason) {
this.set('errorMessage', reason.error);
} catch (response) {
let responseBody = await response.clone().json();
this.set('errorMessage', responseBody);
}
},

Expand Down
6 changes: 3 additions & 3 deletions tests/dummy/app/templates/components/login-form.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
<form {{action 'authenticateWithOAuth2' on='submit'}}>
<div class="form-group">
<label for="identification">Login</label>
<input type="text" placeholder="Enter Login" class="form-control" onchange={{action 'updateIdentification'}} value={{this.identification}} />
<input type="text" placeholder="Enter Login" class="form-control" onchange={{action 'updateIdentification'}} value={{this.identification}} data-test-identification />
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" placeholder="Enter Password" class="form-control" onchange={{action 'updatePassword'}} value={{this.password}} />
<input type="password" placeholder="Enter Password" class="form-control" onchange={{action 'updatePassword'}} value={{this.password}} data-test-password />
</div>
<div class="form-group form-check">
<input type="checkbox" class="form-check-input" id="rememberMe" onchange={{action 'updateRememberMe'}} checked={{this.rememberMe}} />
Expand All @@ -22,7 +22,7 @@
<button type="submit" class="btn btn-primary">Login</button>
</form>
{{#if errorMessage}}
<div class="alert alert-danger">
<div class="alert alert-danger" data-test-error-message>
<p>
<strong>Login failed:</strong> <code>{{errorMessage}}</code>
</p>
Expand Down
123 changes: 102 additions & 21 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-numeric-separator" "^7.8.3"

"@babel/plugin-proposal-object-rest-spread@^7.9.0":
"@babel/plugin-proposal-object-rest-spread@^7.8.3", "@babel/plugin-proposal-object-rest-spread@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz#a28993699fc13df165995362693962ba6b061d6f"
integrity sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==
Expand All @@ -372,7 +372,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-optional-chaining" "^7.8.0"

"@babel/plugin-proposal-optional-chaining@^7.9.0":
"@babel/plugin-proposal-optional-chaining@^7.8.3", "@babel/plugin-proposal-optional-chaining@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58"
integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==
Expand Down Expand Up @@ -496,7 +496,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
lodash "^4.17.13"

"@babel/plugin-transform-classes@^7.9.0":
"@babel/plugin-transform-classes@^7.8.6", "@babel/plugin-transform-classes@^7.9.0":
version "7.9.2"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz#8603fc3cc449e31fdbdbc257f67717536a11af8d"
integrity sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==
Expand Down Expand Up @@ -547,7 +547,7 @@
"@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"

"@babel/plugin-transform-for-of@^7.9.0":
"@babel/plugin-transform-for-of@^7.8.6", "@babel/plugin-transform-for-of@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e"
integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==
Expand Down Expand Up @@ -576,7 +576,7 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"

"@babel/plugin-transform-modules-amd@^7.7.5", "@babel/plugin-transform-modules-amd@^7.9.0":
"@babel/plugin-transform-modules-amd@^7.7.5", "@babel/plugin-transform-modules-amd@^7.8.3", "@babel/plugin-transform-modules-amd@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz#19755ee721912cf5bb04c07d50280af3484efef4"
integrity sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==
Expand All @@ -585,7 +585,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
babel-plugin-dynamic-import-node "^2.3.0"

"@babel/plugin-transform-modules-commonjs@^7.9.0":
"@babel/plugin-transform-modules-commonjs@^7.8.3", "@babel/plugin-transform-modules-commonjs@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940"
integrity sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==
Expand All @@ -595,7 +595,7 @@
"@babel/helper-simple-access" "^7.8.3"
babel-plugin-dynamic-import-node "^2.3.0"

"@babel/plugin-transform-modules-systemjs@^7.9.0":
"@babel/plugin-transform-modules-systemjs@^7.8.3", "@babel/plugin-transform-modules-systemjs@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz#e9fd46a296fc91e009b64e07ddaa86d6f0edeb90"
integrity sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==
Expand All @@ -605,7 +605,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
babel-plugin-dynamic-import-node "^2.3.0"

"@babel/plugin-transform-modules-umd@^7.9.0":
"@babel/plugin-transform-modules-umd@^7.8.3", "@babel/plugin-transform-modules-umd@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697"
integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==
Expand Down Expand Up @@ -743,7 +743,70 @@
core-js "^2.6.5"
regenerator-runtime "^0.13.4"

"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.9.0":
"@babel/preset-env@^7.0.0":
version "7.8.7"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.7.tgz#1fc7d89c7f75d2d70c2b6768de6c2e049b3cb9db"
integrity sha512-BYftCVOdAYJk5ASsznKAUl53EMhfBbr8CJ1X+AJLfGPscQkwJFiaV/Wn9DPH/7fzm2v6iRYJKYHSqyynTGw0nw==
dependencies:
"@babel/compat-data" "^7.8.6"
"@babel/helper-compilation-targets" "^7.8.7"
"@babel/helper-module-imports" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-proposal-async-generator-functions" "^7.8.3"
"@babel/plugin-proposal-dynamic-import" "^7.8.3"
"@babel/plugin-proposal-json-strings" "^7.8.3"
"@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3"
"@babel/plugin-proposal-object-rest-spread" "^7.8.3"
"@babel/plugin-proposal-optional-catch-binding" "^7.8.3"
"@babel/plugin-proposal-optional-chaining" "^7.8.3"
"@babel/plugin-proposal-unicode-property-regex" "^7.8.3"
"@babel/plugin-syntax-async-generators" "^7.8.0"
"@babel/plugin-syntax-dynamic-import" "^7.8.0"
"@babel/plugin-syntax-json-strings" "^7.8.0"
"@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0"
"@babel/plugin-syntax-object-rest-spread" "^7.8.0"
"@babel/plugin-syntax-optional-catch-binding" "^7.8.0"
"@babel/plugin-syntax-optional-chaining" "^7.8.0"
"@babel/plugin-syntax-top-level-await" "^7.8.3"
"@babel/plugin-transform-arrow-functions" "^7.8.3"
"@babel/plugin-transform-async-to-generator" "^7.8.3"
"@babel/plugin-transform-block-scoped-functions" "^7.8.3"
"@babel/plugin-transform-block-scoping" "^7.8.3"
"@babel/plugin-transform-classes" "^7.8.6"
"@babel/plugin-transform-computed-properties" "^7.8.3"
"@babel/plugin-transform-destructuring" "^7.8.3"
"@babel/plugin-transform-dotall-regex" "^7.8.3"
"@babel/plugin-transform-duplicate-keys" "^7.8.3"
"@babel/plugin-transform-exponentiation-operator" "^7.8.3"
"@babel/plugin-transform-for-of" "^7.8.6"
"@babel/plugin-transform-function-name" "^7.8.3"
"@babel/plugin-transform-literals" "^7.8.3"
"@babel/plugin-transform-member-expression-literals" "^7.8.3"
"@babel/plugin-transform-modules-amd" "^7.8.3"
"@babel/plugin-transform-modules-commonjs" "^7.8.3"
"@babel/plugin-transform-modules-systemjs" "^7.8.3"
"@babel/plugin-transform-modules-umd" "^7.8.3"
"@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3"
"@babel/plugin-transform-new-target" "^7.8.3"
"@babel/plugin-transform-object-super" "^7.8.3"
"@babel/plugin-transform-parameters" "^7.8.7"
"@babel/plugin-transform-property-literals" "^7.8.3"
"@babel/plugin-transform-regenerator" "^7.8.7"
"@babel/plugin-transform-reserved-words" "^7.8.3"
"@babel/plugin-transform-shorthand-properties" "^7.8.3"
"@babel/plugin-transform-spread" "^7.8.3"
"@babel/plugin-transform-sticky-regex" "^7.8.3"
"@babel/plugin-transform-template-literals" "^7.8.3"
"@babel/plugin-transform-typeof-symbol" "^7.8.4"
"@babel/plugin-transform-unicode-regex" "^7.8.3"
"@babel/types" "^7.8.7"
browserslist "^4.8.5"
core-js-compat "^3.6.2"
invariant "^2.2.2"
levenary "^1.1.1"
semver "^5.5.0"

"@babel/preset-env@^7.9.0":
version "7.9.0"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8"
integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==
Expand Down Expand Up @@ -5084,20 +5147,20 @@ ember-cli-babel-plugin-helpers@^1.0.0, ember-cli-babel-plugin-helpers@^1.1.0:
integrity sha512-Zr4my8Xn+CzO0gIuFNXji0eTRml5AxZUTDQz/wsNJ5AJAtyFWCY4QtKdoELNNbiCVGt1lq5yLiwTm4scGKu6xA==

ember-cli-babel@*, ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.13.2, ember-cli-babel@^7.17.2, ember-cli-babel@^7.18.0, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3:
version "7.19.0"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.19.0.tgz#e6eddea18a867231fcf90a80689e92b98be9a63b"
integrity sha512-HiWKuoyy35vGEr+iCw6gUnQ3pS5qslyTlKEDW8cVoMbvZNGYBgRxHed5nklVUh+BS74AwR9lsp25BTAagYAP9Q==
version "7.18.0"
resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.18.0.tgz#e979b73eee00cd93f63452c6170d045e8832f29c"
integrity sha512-OLPfYD8wSfCrmGHcUf8zEfySSvbAL+5Qp2RWLycJIMaBZhg+SncKj5kVkL3cPJR5n2hVHPdfmKTQIYjOYl6FnQ==
dependencies:
"@babel/core" "^7.9.0"
"@babel/helper-compilation-targets" "^7.8.7"
"@babel/core" "^7.8.4"
"@babel/helper-compilation-targets" "^7.8.4"
"@babel/plugin-proposal-class-properties" "^7.8.3"
"@babel/plugin-proposal-decorators" "^7.8.3"
"@babel/plugin-transform-modules-amd" "^7.9.0"
"@babel/plugin-transform-runtime" "^7.9.0"
"@babel/plugin-transform-typescript" "^7.9.0"
"@babel/polyfill" "^7.8.7"
"@babel/preset-env" "^7.9.0"
"@babel/runtime" "^7.9.0"
"@babel/plugin-transform-modules-amd" "^7.8.3"
"@babel/plugin-transform-runtime" "^7.8.3"
"@babel/plugin-transform-typescript" "^7.8.3"
"@babel/polyfill" "^7.8.3"
"@babel/preset-env" "^7.8.4"
"@babel/runtime" "^7.8.4"
amd-name-resolver "^1.2.1"
babel-plugin-debug-macros "^0.3.0"
babel-plugin-ember-data-packages-polyfill "^0.1.2"
Expand Down Expand Up @@ -5490,6 +5553,15 @@ ember-cli-version-checker@^4.1.0:
semver "^6.3.0"
silent-error "^1.1.1"

ember-cli-version-checker@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/ember-cli-version-checker/-/ember-cli-version-checker-5.0.1.tgz#1cf488f1ece02b295577177d6a2ca51496d7967c"
integrity sha512-gvqyLZM8q31J1UD4OZVoK+T7iapz1jfLWJ23217lXcqMR3NA+VSzZi9B61zlMmCZzlxq3QPWkiL0OspVGCGR3A==
dependencies:
resolve-package-path "^2.0.0"
semver "^7.1.3"
silent-error "^1.1.1"

ember-cli-yuidoc@^0.9.1:
version "0.9.1"
resolved "https://registry.yarnpkg.com/ember-cli-yuidoc/-/ember-cli-yuidoc-0.9.1.tgz#bc2171eb160b02ad5f4078e83e3648b95628ced9"
Expand Down Expand Up @@ -5968,6 +6040,15 @@ ember-source@~3.17.0:
semver "^6.1.1"
silent-error "^1.1.1"

ember-test-selectors@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/ember-test-selectors/-/ember-test-selectors-4.0.0.tgz#84604b499ddbff290957c3fa0b1e7a9844f5174d"
integrity sha512-ABZ7+Xs8kcnVd9mp1AhGPuGPtaalz10cVpQIw1biA6TEscEnFhcJObtqyaxvF6C9AqfZ6p/MsgJZrXMPpgnpmw==
dependencies:
calculate-cache-key-for-tree "^2.0.0"
ember-cli-babel "^7.18.0"
ember-cli-version-checker "^5.0.1"

ember-test-waiters@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/ember-test-waiters/-/ember-test-waiters-1.2.0.tgz#c12ead4313934c24cff41857020cacdbf8e6effe"
Expand Down Expand Up @@ -11374,7 +11455,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==

semver@^7.0.0, semver@^7.1.1:
semver@^7.0.0, semver@^7.1.1, semver@^7.1.3:
version "7.1.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6"
integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA==
Expand Down

0 comments on commit f42dc8e

Please sign in to comment.