Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
d6a444f
Update eslint settings
tnorling Jun 11, 2020
02ea320
Add b2c sample
tnorling Jun 11, 2020
6d0f45c
Add login tests
tnorling Jun 11, 2020
e64aa03
Add acquireToken tests
tnorling Jun 12, 2020
d8a81f0
Merge branch 'dev' into b2c-E2E-Sample
tnorling Jun 12, 2020
7452390
Add E2E for 2.0
tnorling Jun 12, 2020
34c8c89
Merge branch 'b2c-E2E-Sample' of https://github.com/AzureAD/microsoft…
tnorling Jun 12, 2020
d48b188
Remove telemetry config from 2.0 sample
tnorling Jun 12, 2020
7055edb
Verify contents of cache, not quantity
tnorling Jun 12, 2020
eb57298
Verify contents of cache, not quantity
tnorling Jun 13, 2020
453d54f
More accurately confirm successful login before moving on
tnorling Jun 16, 2020
b3a7c3f
Merge branch 'dev' into b2c-E2E-Sample
tnorling Jun 16, 2020
70673b7
Remove telemetry config
tnorling Jun 17, 2020
d412d92
Merge branch 'dev' into b2c-E2E-Sample
tnorling Jun 17, 2020
d26a6e7
Setup tests to allow for easier lab user selection
tnorling Jun 17, 2020
2bd295b
Setup tests to allow for easier lab user selection
tnorling Jun 17, 2020
c05dfd8
Merge branch 'dev' of https://github.com/AzureAD/microsoft-authentica…
tnorling Jun 19, 2020
bd13710
Update sample
tnorling Jun 19, 2020
e8348ca
Update account logic
tnorling Jun 19, 2020
d843501
Merge branch 'dev' of https://github.com/AzureAD/microsoft-authentica…
tnorling Jul 6, 2020
1f04005
Update browser sample
tnorling Jul 6, 2020
ab946b5
Merge branch 'dev' of https://github.com/AzureAD/microsoft-authentica…
tnorling Jul 17, 2020
e7a96fb
Merge branch 'dev' of https://github.com/AzureAD/microsoft-authentica…
tnorling Jul 27, 2020
5491e4b
Update E2E tests
tnorling Jul 27, 2020
f30c209
Remove 2.0 sample
tnorling Aug 10, 2020
4f2fdba
Merge branch 'dev' of https://github.com/AzureAD/microsoft-authentica…
tnorling Aug 10, 2020
e0bc92e
Revert changes to 2.0 test utils
tnorling Aug 10, 2020
5385d38
Revert changes to 2.0 test utils
tnorling Aug 10, 2020
9b61568
Merge branch 'dev' into b2c-E2E-Sample
tnorling Aug 11, 2020
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
Prev Previous commit
Next Next commit
Verify contents of cache, not quantity
  • Loading branch information
tnorling committed Jun 12, 2020
commit 7055edb3d1b2b8e2bad355a372dc5003be4baf57
109 changes: 85 additions & 24 deletions samples/VanillaJSTestApp2.0/app/b2c/test/browser.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ let SCREENSHOT_NUM = 0;
let username = "";
let accountPwd = "";

// Set App Info
const clientId = "e3b9ad76-9763-4827-b088-80c7a7888f79";
const authority = "https://login.microsoftonline.com/tfp/msidlabb2c.onmicrosoft.com/B2C_1_SISOPolicy/"
const scopes = ["https://msidlabb2c.onmicrosoft.com/msidlabb2capi/read"]
const idTokenCacheKey = "msal." + clientId + ".idtoken"
const clientInfoCacheKey = "msal." + clientId + ".client.info"

function setupScreenshotDir() {
if (!fs.existsSync(`${SCREENSHOT_BASE_FOLDER_NAME}`)) {
fs.mkdirSync(SCREENSHOT_BASE_FOLDER_NAME);
Expand Down Expand Up @@ -97,6 +104,29 @@ async function loginPopup(page: puppeteer.Page, testName: string): Promise<void>
await takeScreenshot(page, testName, `samplePageLoggedIn`);
}

async function validateAccessTokens(page: puppeteer.Page, localStorage: Storage) {
let accessTokensFound = 0
let accessTokenMatch: boolean;

Object.keys(localStorage).forEach(async (key) => {
if (key.includes("authority")) {
let cacheKey = JSON.parse(key);
let cachedScopeList = cacheKey.scopes.split(" ");

accessTokenMatch = cacheKey.authority === authority.toLowerCase() &&
cacheKey.clientId.toLowerCase() === clientId.toLowerCase() &&
scopes.every(scope => cachedScopeList.includes(scope));

if (accessTokenMatch) {
accessTokensFound += 1;
await page.evaluate((key) => window.localStorage.removeItem(key))
}
}
});

return accessTokensFound;
}

describe("Browser tests", function () {
this.timeout(8000);
this.retries(1);
Expand All @@ -113,77 +143,108 @@ describe("Browser tests", function () {

let context: puppeteer.BrowserContext;
let page: puppeteer.Page;
beforeEach(async () => {
SCREENSHOT_NUM = 0;
context = await browser.createIncognitoBrowserContext();
page = await context.newPage();
await page.goto('http://localhost:30662/');
});

afterEach(async () => {
await page.close();
});

after(async () => {
await context.close();
await browser.close();
});

describe("Test Login functions", async () => {
beforeEach(async () => {
SCREENSHOT_NUM = 0;
context = await browser.createIncognitoBrowserContext();
page = await context.newPage();
await page.goto('http://localhost:30662/');
});

afterEach(async () => {
await page.close();
});

it("Performs loginRedirect", async () => {
const testName = "redirectBaseCase";
await loginRedirect(page, testName);

const localStorage = await page.evaluate(() => Object.assign({}, window.localStorage));
expect(Object.keys(localStorage).length).to.be.eq(3);

expect(Object.keys(localStorage)).to.contain(idTokenCacheKey);
expect(Object.keys(localStorage)).to.contain(clientInfoCacheKey);
});

it("Performs loginPopup", async () => {
const testName = "popupBaseCase";
await loginPopup(page, testName);

const localStorage = await page.evaluate(() => Object.assign({}, window.localStorage));
expect(Object.keys(localStorage).length).to.be.eq(3);
expect(Object.keys(localStorage)).to.contain(idTokenCacheKey);
expect(Object.keys(localStorage)).to.contain(clientInfoCacheKey);
});
});

describe("Test AcquireToken functions", async () => {
it("Test acquireTokenRedirect", async () => {
const testName = "acquireTokenRedirectBaseCase";
const testName = "acquireTokenBaseCase";

before(async () => {
SCREENSHOT_NUM = 0;
context = await browser.createIncognitoBrowserContext();
page = await context.newPage();
await page.goto('http://localhost:30662/');
await loginPopup(page, testName);
});

after(async () => {
await page.close();
});

afterEach(async () => {
await page.reload();
});

it("Test acquireTokenRedirect", async () => {
await page.waitForSelector("#getAccessTokenRedirect");
await page.click("#getAccessTokenRedirect");
await page.waitForSelector("#access-token-info");
await takeScreenshot(page, testName, "accessTokenAcquired");
await takeScreenshot(page, testName, "accessTokenAcquiredRedirect");

const localStorage = await page.evaluate(() => Object.assign({}, window.localStorage));
expect(Object.keys(localStorage).length).to.be.eq(4);
expect(Object.keys(localStorage)).to.contain(idTokenCacheKey);
expect(Object.keys(localStorage)).to.contain(clientInfoCacheKey);

const accessTokensFound = await validateAccessTokens(page, localStorage);
expect(accessTokensFound).to.equal(1);
});

it("Test acquireTokenPopup", async () => {
const testName = "acquireTokenPopupBaseCase";
await loginPopup(page, testName);
await page.waitForSelector("#getAccessTokenPopup");
await page.click("#getAccessTokenPopup");
await page.waitForSelector("#access-token-info");
await takeScreenshot(page, testName, "accessTokenAcquired");
await takeScreenshot(page, testName, "accessTokenAcquiredPopup");

const localStorage = await page.evaluate(() => Object.assign({}, window.localStorage));
expect(Object.keys(localStorage).length).to.be.eq(4);
expect(Object.keys(localStorage)).to.contain(idTokenCacheKey);
expect(Object.keys(localStorage)).to.contain(clientInfoCacheKey);

const accessTokensFound = await validateAccessTokens(page, localStorage);
expect(accessTokensFound).to.equal(1);
});

it("Test acquireTokenSilent", async () => {
const testName = "acquireTokenSilentBaseCase";
await loginPopup(page, testName);
await page.waitForSelector("#getAccessTokenPopup");
await page.click("#getAccessTokenPopup");
await page.waitForSelector("#access-token-info");
await page.reload();
await takeScreenshot(page, testName, "accessTokenAcquiredInteractively");

await page.waitForSelector("#getAccessTokenSilent");
await page.click("#getAccessTokenSilent");
await page.waitForSelector("#access-token-info");
await takeScreenshot(page, testName, "accessTokenAcquiredSilently");

const localStorage = await page.evaluate(() => Object.assign({}, window.localStorage));
expect(Object.keys(localStorage).length).to.be.eq(4);
expect(Object.keys(localStorage)).to.contain(idTokenCacheKey);
expect(Object.keys(localStorage)).to.contain(clientInfoCacheKey);

const accessTokensFound = await validateAccessTokens(page, localStorage);
expect(accessTokensFound).to.equal(1);
});
});
});