ember-simple-auth и неявная аутентификация Grant: используйте помощник по тестированию authenticateSession - PullRequest
0 голосов
/ 08 февраля 2019

Если пользователь не аутентифицирован, я перенаправляю его на корпоративную страницу входа:

https://super-secret-gateway/authorization.oauth2?client_id=XXXX&redirect_uri=http://localhost:4200/callback&response_type=token&scope=profile%20openid

Как только он аутентифицируется после ввода имени пользователя и пароля, он перенаправляется обратно со следующим URL

https://myapp/callback#access_token=2YotnFZFEjr1zCsicMWpAA&type=Bearer&expire_in=3600&state=myAppRandomState

Я не могу понять, как использовать authenticateSession тест помощник в этом случае.В документации ESA нет подробного примера об этом, и то, как я это делаю, не работает:

module('Acceptance | Dashboard', function(hooks) {
  setupWindowMock(hooks);
  setupApplicationTest(hooks);
  setupMirageTest(hooks);

  test('Authenticated users can visit /dashboard', async function(assert) {
    let shop = this.server.create('shop');
    this.server.create('user', { shop });

    await authenticateSession({
      token: 'abcdDEF',
      token_type: 'Bearer'
    });

    await visit('/dashboard');

    assert.equal(currentURL(), '/dashboard', 'user is on dashboard page');
  });
});

Похоже, что проблема связана с использованием window.location.replace в моем маршруте index:

экспорт по умолчанию Route.extend (UnauthenticatedRouteMixin, {session: service ('session'), routeIfAlreadyAuthenticated: 'dashboard',

  beforeModel: function() {
    this._super(...arguments);
    if (!this.get('session.isAuthenticated')) {
      let oauthUrl = config.oauthUrl;
      let clientId = config.clientID;
      let redirectURI = `${window.location.origin}/callback`;
      let responseType = `token`;
      let scope = `profile%20openid`;
      window.location.replace(oauthUrl
                            + `?client_id=${clientId}`
                            + `&redirect_uri=${redirectURI}`
                            + `&response_type=${responseType}`
                            + `&scope=${scope}`
      );
    }
  }

Чтобы обойти эту проблему, я должен использовать ember-window-mock дополнение. Но в данном случае проблема все еще существует. Дело в том, что я использую это утверждение:

assert.equal(window.location.href, '/dashboard', 'user is on dashboard page');

тест отображает разницу window.location.href указывает на страницу входа вместо /dashboard. Если я использую это утверждение:

assert.equal(currentURL(), '/dashboard', 'user is on dashboard page');

разница будет:

Expected:|"/dashboard"|
|Result:|"/"|

Что мне не хватает? Спасибо.

...