diff --git a/src/js/lib/load_aws_config.js b/src/js/lib/load_aws_config.js deleted file mode 100644 index 1ed2bc0..0000000 --- a/src/js/lib/load_aws_config.js +++ /dev/null @@ -1,87 +0,0 @@ -class AwsConfigIniParser { - load(text) { - const lines = text.split(/\r\n|\r|\n/); - - this.profiles = []; - this.item = null; - lines.forEach(line => { this.parseLine(line) }); - this.appendProfile(); - - return this.profiles; - } - - parseLine(line) { - line = line.replace(/[\;\#].*$/, '').trim() // trim comment and spaces - if (line.length === 0) return; // skip empty line - - const item = this.item; - const md = line.match(/^\[(.+)\]$/); - if (md) { - this.appendProfile(); - this.newProfile(md[1].trim()); - } else if (item) { - const field = this.parseKeyValue(line); - if (field.key in item) throw new Error(`duplicate definition of ${field.key}`) - item[field.key] = field.value; - } else { - throw new Error('profile is not declared before the key property definitions') - } - } - - trimComment(str) { - return str.replace(/[;#].*$/, '') - } - - parseKeyValue(line) { - const [key, val] = line.split('=', 2); - if (val === undefined) throw new Error('invalid key property definition') - return { key: key.trim(), value: val.trim() }; - } - - newProfile(name) { - const pname = name.replace(/^profile\s+/i, ''); - this.item = { profile: pname }; - } - - appendProfile() { - if (!this.item) return; - - const profile = this.brushAwsProfile(this.item); - this.profiles.push(profile); - this.item = null; - } - - brushAwsProfile(item) { - if (item.role_arn) { - const parts = item.role_arn.split('/'); - const iams = parts.shift().split(':'); - - item.aws_account_id = iams[4]; - item.role_name = parts.join('/'); - - delete item.role_arn; - } - - if (!item.aws_account_id) throw new Error('Found a profile definition which does not include an AWS account id') - - return item; - } -} - -export function loadAwsConfig(text) { - const parser = new AwsConfigIniParser() - const items = parser.load(text); - - // Set single flag to independent profiles - const sourceProfileSet = new Set(); - items.forEach(it => { - if (it.source_profile) sourceProfileSet.add(it.source_profile); - }); - items.forEach(it => { - if (!it.source_profile && !sourceProfileSet.has(it.profile)) { - it.single = true; - } - }); - - return items; -} diff --git a/src/js/lib/load_aws_config.test.js b/src/js/lib/load_aws_config.test.js deleted file mode 100644 index 72605bc..0000000 --- a/src/js/lib/load_aws_config.test.js +++ /dev/null @@ -1,132 +0,0 @@ -import { expect } from 'chai' -import { loadAwsConfig } from './load_aws_config.js' - -describe('loadAwsConfig', () => { - describe('Simple Configuration', () => { - it('load profiles', () => { - const results = loadAwsConfig(`\ -[profile marketingadmin] -role_arn = arn:aws:iam::123456789012:role/marketingadmin -color = ffaaee - -[anotheraccount] -aws_account_id = 987654321987 -role_name = anotherrole -region=ap-northeast-1 - -[athirdaccount] -aws_account_id = 987654321988 -role_name = athirdrole -image = "https://via.placeholder.com/150" -`); - expect(results[0]).to.deep.equal({ profile: 'marketingadmin', aws_account_id: '123456789012', role_name: 'marketingadmin', color: 'ffaaee', single: true }); - expect(results[1]).to.deep.equal({ profile: 'anotheraccount', aws_account_id: '987654321987', role_name: 'anotherrole', region: 'ap-northeast-1', single: true }); - expect(results[2]).to.deep.equal({ profile: 'athirdaccount', aws_account_id: '987654321988', role_name: 'athirdrole', image: '"https://via.placeholder.com/150"', single: true }); - }) - }) - - describe('Complex Configuration', () => { - it('load profiles', () => { - const results = loadAwsConfig(`\ -[organization1] -aws_account_id = your-account-alias - -[Org1-Account1-Role1] -role_arn = arn:aws:iam::123456789012:role/Role1 -source_profile = organization1 - -[Org1-Account1-Role2] -aws_account_id = 123456789013 -role_name = Role2 -source_profile = organization1 - -[baseaccount2] -aws_account_id = 000000000000 - -[profile Base2/Role1] -role_arn = arn:aws:iam::234567890123:role/Role1 -source_profile = baseaccount2 - -[AnotherRole] -role_name = SomeOtherRole#comment -aws_account_id = account-3-alias -`); - expect(results[0]).to.deep.equal({ profile: 'organization1', aws_account_id: 'your-account-alias' }); - expect(results[1]).to.deep.equal({ profile: 'Org1-Account1-Role1', aws_account_id: '123456789012', role_name: 'Role1', source_profile: 'organization1' }); - expect(results[2]).to.deep.equal({ profile: 'Org1-Account1-Role2', aws_account_id: '123456789013', role_name: 'Role2', source_profile: 'organization1' }); - expect(results[3]).to.deep.equal({ profile: 'baseaccount2', aws_account_id: '000000000000' }); - expect(results[4]).to.deep.equal({ profile: 'Base2/Role1', aws_account_id: '234567890123', role_name: 'Role1', source_profile: 'baseaccount2' }); - expect(results[5]).to.deep.equal({ profile: 'AnotherRole', aws_account_id: 'account-3-alias', role_name: 'SomeOtherRole', single: true }); - }) - }) - - describe('comments and spaces are everywhere', () => { - it('trims all comments and spaces', () => { - const results = loadAwsConfig(`\ -[profile a]# comment -; comment -role_arn = arn:aws:iam::123456789012:role/roleA # - - [profile B] # comment -role_arn = arn:aws:iam::123456789012:role/role-b; - # comment -[profileC];comment -# comment - role_arn = arn:aws:iam::123456789012:role/c ;comment - ; comment -`); - expect(results[0]).to.deep.equal({ profile: 'a', aws_account_id: '123456789012', role_name: 'roleA', single: true }); - expect(results[1]).to.deep.equal({ profile: 'B', aws_account_id: '123456789012', role_name: 'role-b', single: true }); - expect(results[2]).to.deep.equal({ profile: 'profileC', aws_account_id: '123456789012', role_name: 'c', single: true }); - }) - }) - - describe('when section has duplicate key', () => { - it('throws an error whose message is "duplicate definition of ~"', () => { - expect(() => { - loadAwsConfig(` - [profile A] - role_arn = arn:aws:iam::123456789012:role/roleA - - ;[ignored] - role_arn = arn:aws:iam::123456789012:role/role-B - `); - }).to.throw(`duplicate definition of role_arn`); - }) - }) - - describe('when section is not declared', () => { - it('throws an error whose message is "profile is not declared ~"', () => { - expect(() => { - loadAwsConfig(` - role_arn = arn:aws:iam::123456789012:role/roleA - - [nextprofile] - role_arn = arn:aws:iam::123456789012:role/role-B - `); - }).to.throw(`profile is not declared before the key property definitions`); - }) - }) - - describe('when key property line is wrong', () => { - it('throws an error whose message is "invalid key property definition"', () => { - expect(() => { - loadAwsConfig(` - [a] - key property does not contain equal - `); - }).to.throw(`invalid key property definition`); - }) - }) - - describe('when profile does not specify AWS account id', () => { - it('throws an error whose message is "Found a profile definition which does not include an AWS account id"', () => { - expect(() => { - loadAwsConfig(` - [b] - key=property - `); - }).to.throw(`Found a profile definition which does not include an AWS account id`); - }) - }) -}) diff --git a/test/browser/content_scripts.test.js b/test/browser/content_scripts.test.js deleted file mode 100644 index 0dfafbc..0000000 --- a/test/browser/content_scripts.test.js +++ /dev/null @@ -1,404 +0,0 @@ -describe('ContentScripts', () => { - context('when initial user have signed in', () => { - beforeEach(() => { - loadFixtures('awsmc-iam-initial', 'data'); - }) - - it('does not run generateEmptyRoleList and awsc-username-menu-recent-roles does not exist', () => { - expect(document.body.className.includes('user-type-iam')).to.be.true; - expect(document.getElementById('awsc-username-menu-recent-roles')).to.be.null; - }) - - it('creates awsc-username-menu-recent-roles', () => { - extendIAMFormList(); - expect(document.body.className.includes('user-type-iam')).to.be.true; - expect(document.getElementById('awsc-username-menu-recent-roles')).to.exist; - }) - }) - - context('when iam user have signed in with 5 histories', () => { - it('load base aws account is number', () => { - loadFixtures('awsmc-iam'); - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.true; - expect(document.body.className.includes('user-type-federated')).to.be.false; - expect(document.querySelectorAll('#awsc-username-menu-recent-roles li').length).to.eq(5); - }) - - context('not hidesHistory', () => { - context('base profile is undefined', () => { - it('appends 2 roles but one of them already exists', () => { - loadFixtures('awsmc-iam', 'data'); - chrome.storage.sync.data.hidesHistory = false; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.true; - expect(document.body.className.includes('user-type-federated')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - }) - }) - - context('base-a profile', () => { - it('hides base-b histories and appends 3 roles', () => { - loadFixtures('awsmc-exclude-unrelated-profile-from-history', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '5555-1111-2222'; - chrome.storage.sync.data.hidesHistory = false; - extendIAMFormList(); - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(5); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('stg-role_history'); - expect(roles[0].querySelector('input[type="submit"]').value).to.eq('a-stg'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('a-prod | 555511114444'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('stg-role-image'); - expect(roles[4].querySelector('input[type="submit"]').value).to.eq('a-stg-image | 555511113333'); - }) - }) - }) - - context('hidesHistory', () => { - context('base profile is undefined', () => { - it('hides histories and appends 2 roles', () => { - loadFixtures('awsmc-iam', 'data'); - chrome.storage.sync.data.hidesHistory = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.true; - expect(document.body.className.includes('user-type-federated')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(2); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - }) - }) - - context('base-a profile', () => { - it('hides histories and appends 4 roles', () => { - loadFixtures('awsmc-iam', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '5555-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.true; - expect(document.body.className.includes('user-type-federated')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(5); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('a-stg | 555511113333'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('a-prod | 555511114444'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('stg-role-image'); - expect(roles[4].querySelector('input[type="submit"]').value).to.eq('a-stg-image | 555511113333'); - }) - }) - - context('base-b profile', () => { - it('hides histories and appends 5 roles', () => { - loadFixtures('awsmc-iam', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.true; - expect(document.body.className.includes('user-type-federated')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('b-stg | 666611113333'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('b-prod | 666611114444'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[4].querySelector('input[type="submit"]').value).to.eq('b-renpou | 666611115555'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('prod-role-image'); - expect(roles[5].querySelector('input[type="submit"]').value).to.eq('b-prod-image | 666611114444'); - }) - }) - }) - - context('hidesHistory and hidesAccountId', () => { - context('base-b profile', () => { - it('hides account id', () => { - loadFixtures('awsmc-iam', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - chrome.storage.sync.data.hidesAccountId = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.true; - expect(document.body.className.includes('user-type-federated')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[0].querySelector('input[type="submit"]').value).to.eq('independence'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[1].querySelector('input[type="submit"]').value).to.eq('history-contained'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('b-stg'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('b-prod'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[4].querySelector('input[type="submit"]').value).to.eq('b-renpou'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('prod-role-image'); - expect(roles[5].querySelector('input[type="submit"]').value).to.eq('b-prod-image'); - }) - }) - }) - - context('showOnlyMatchingRoles', () => { - it('does not affect', () => { - loadFixtures('awsmc-iam', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.showOnlyMatchingRoles = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.true; - expect(document.body.className.includes('user-type-federated')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(10); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[6].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[6].querySelector('input[type="submit"]').value).to.eq('b-stg | 666611113333'); - expect(roles[7].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[7].querySelector('input[type="submit"]').value).to.eq('b-prod | 666611114444'); - expect(roles[8].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[8].querySelector('input[type="submit"]').value).to.eq('b-renpou | 666611115555'); - expect(roles[9].querySelector('input[name="roleName"]').value).to.eq('prod-role-image'); - expect(roles[9].querySelector('input[type="submit"]').value).to.eq('b-prod-image | 666611114444'); - }) - }) - - context('hidesHistory and showOnlyMatchingRoles', () => { - it('does not affect', () => { - loadFixtures('awsmc-iam', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - chrome.storage.sync.data.showOnlyMatchingRoles = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.true; - expect(document.body.className.includes('user-type-federated')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('b-stg | 666611113333'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('b-prod | 666611114444'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[4].querySelector('input[type="submit"]').value).to.eq('b-renpou | 666611115555'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('prod-role-image'); - expect(roles[5].querySelector('input[type="submit"]').value).to.eq('b-prod-image | 666611114444'); - }) - }) - }) - - context('when federated user have signed in with 5 histories', () => { - it('load base aws account is number', () => { - loadFixtures('awsmc-federated'); - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.false; - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.querySelectorAll('#awsc-username-menu-recent-roles li').length).to.eq(5); - }) - - context('not hidesHistory', () => { - context('base profile is undefined', () => { - it('appends 2 roles but one of them already exists', () => { - loadFixtures('awsmc-federated', 'data'); - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.false; - expect(document.body.className.includes('user-type-federated')).to.be.true; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - }) - }) - }) - - context('hidesHistory', () => { - context('base profile is undefined', () => { - it('hides histories and appends 2 roles', () => { - loadFixtures('awsmc-federated', 'data'); - chrome.storage.sync.data.hidesHistory = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.false; - expect(document.body.className.includes('user-type-federated')).to.be.true; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(2); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - }) - }) - - context('base-a profile', () => { - it('hides histories and appends 4 roles', () => { - loadFixtures('awsmc-federated', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '5555-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(5); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('a-stg | 555511113333'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('a-prod | 555511114444'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('stg-role-image'); - expect(roles[4].querySelector('input[type="submit"]').value).to.eq('a-stg-image | 555511113333'); - }) - }) - - context('base-b profile', () => { - it('hides histories and appends 5 roles', () => { - loadFixtures('awsmc-federated', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('b-stg | 666611113333'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('b-prod | 666611114444'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[4].querySelector('input[type="submit"]').value).to.eq('b-renpou | 666611115555'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('prod-role-image'); - expect(roles[5].querySelector('input[type="submit"]').value).to.eq('b-prod-image | 666611114444'); - }) - }) - }) - - context('showOnlyMatchingRoles', () => { - it('appends 3 roles but one of them already exists', () => { - loadFixtures('awsmc-federated', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.showOnlyMatchingRoles = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(7); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[6].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[6].querySelector('input[type="submit"]').value).to.eq('b-renpou | 666611115555'); - }) - }) - - context('hidesHistory and showOnlyMatchingRoles', () => { - it('appends 3 roles', () => { - loadFixtures('awsmc-federated', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - chrome.storage.sync.data.showOnlyMatchingRoles = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(3); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('b-renpou | 666611115555'); - }) - }) - - context('hidesHistory, showOnlyMatchingRoles and hidesAccountId', () => { - it('appends 3 roles and nothing breaks', () => { - loadFixtures('awsmc-federated', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - chrome.storage.sync.data.hidesAccountId = true; - chrome.storage.sync.data.showOnlyMatchingRoles = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(3); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('renpou'); - }) - }) - - context('including the AccountId in Search', () => { - it('appends 3 roles then filter', () => { - loadFixtures('awsmc-federated', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - chrome.storage.sync.data.hidesAccountId = false; - chrome.storage.sync.data.showOnlyMatchingRoles = true; - extendIAMFormList(); - - const filter = document.querySelector('#AESR_RoleFilter') - filter.value = "666611115555" - filter.dispatchEvent(new KeyboardEvent('keyup',{'key':'5'})) - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li[style*="display: block;"]')) - expect(roles.length).to.eq(1); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('renpou'); - }) - }) - - context('not including the AccountId in Search', () => { - it('appends 3 roles then filter', () => { - loadFixtures('awsmc-federated', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - chrome.storage.sync.data.hidesAccountId = true; - chrome.storage.sync.data.showOnlyMatchingRoles = true; - extendIAMFormList(); - - const filter = document.querySelector('#AESR_RoleFilter') - filter.value = "666611115555" - filter.dispatchEvent(new KeyboardEvent('keyup',{'key':'5'})) - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li[style*="display: block;"]')) - expect(roles.length).to.eq(0); - }) - }) - }) -}) diff --git a/test/browser/content_switched.test.js b/test/browser/content_switched.test.js deleted file mode 100644 index 59b65cf..0000000 --- a/test/browser/content_switched.test.js +++ /dev/null @@ -1,254 +0,0 @@ -describe('ContentScripts', () => { - context('when iam user have signed in with 5 histories', () => { - it('load base aws account is number', () => { - loadFixtures('awsmc-iam-switched'); - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - expect(document.querySelectorAll('#awsc-username-menu-recent-roles li').length).to.eq(5); - }) - - context('not hidesHistory', () => { - context('base-a profile', () => { - it('appends 4 roles but two of them already exist', () => { - loadFixtures('awsmc-iam-switched', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '5555-1111-2222'; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(8); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[0].querySelector('input[type="submit"]').value).to.eq('a-stg | 555511113333'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[6].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[6].querySelector('input[type="submit"]').value).to.eq('a-prod | 555511114444'); - }) - }) - }) - - context('hidesHistory', () => { - context('base-a profile', () => { - it('hides histories and appends 4 roles', () => { - loadFixtures('awsmc-iam-switched', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '5555-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('a-stg | 555511113333'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('a-prod | 555511114444'); - }) - }) - - context('base-b profile', () => { - it('hides histories and appends 5 roles', () => { - loadFixtures('awsmc-iam-switched', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('b-stg | 666611113333'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('b-prod | 666611114444'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[4].querySelector('input[type="submit"]').value).to.eq('b-renpou | 666611115555'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('prod-role-image'); - expect(roles[5].querySelector('input[type="submit"]').value).to.eq('b-prod-image | 666611114444'); - }) - }) - }) - - context('hidesHistory and hidesAccountId', () => { - context('base-b profile', () => { - it('hides account id', () => { - loadFixtures('awsmc-iam-switched', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - chrome.storage.sync.data.hidesAccountId = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[0].querySelector('input[type="submit"]').value).to.eq('independence'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[1].querySelector('input[type="submit"]').value).to.eq('history-contained'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('b-stg'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('b-prod'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[4].querySelector('input[type="submit"]').value).to.eq('b-renpou'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('prod-role-image'); - expect(roles[5].querySelector('input[type="submit"]').value).to.eq('b-prod-image'); - }) - }) - }) - - context('showOnlyMatchingRoles', () => { - it('filters b-roles by the same role name', () => { - loadFixtures('awsmc-iam-switched', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.showOnlyMatchingRoles = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[5].querySelector('input[type="submit"]').value).to.eq('b-stg | 666611113333'); - }) - }) - - context('hidesHistory and showOnlyMatchingRoles', () => { - it('hides histories and filters b-roles by the same role name', () => { - loadFixtures('awsmc-iam-switched', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - chrome.storage.sync.data.showOnlyMatchingRoles = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(3); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('b-stg | 666611113333'); - }) - }) - }) - - context('when federated user have signed in with 5 histories', () => { - it('load base aws account is number', () => { - loadFixtures('awsmc-federated-switched'); - extendIAMFormList(); - - expect(document.body.className.includes('user-type-iam')).to.be.false; - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.querySelectorAll('#awsc-username-menu-recent-roles li').length).to.eq(5); - }) - - context('not hidesHistory', () => { - context('base-b profile', () => { - it('hides histories and appends 5 roles', () => { - loadFixtures('awsmc-federated-switched', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('b-stg | 666611113333'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('b-prod | 666611114444'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[4].querySelector('input[type="submit"]').value).to.eq('b-renpou | 666611115555'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('prod-role-image'); - expect(roles[5].querySelector('input[type="submit"]').value).to.eq('b-prod-image | 666611114444'); - }) - }) - }) - - context('hidesHistory', () => { - context('base-b profile', () => { - it('hides histories and appends 5 roles', () => { - loadFixtures('awsmc-federated-switched', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('stg-role'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('b-stg | 666611113333'); - expect(roles[3].querySelector('input[name="roleName"]').value).to.eq('prod-role'); - expect(roles[3].querySelector('input[type="submit"]').value).to.eq('b-prod | 666611114444'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[4].querySelector('input[type="submit"]').value).to.eq('b-renpou | 666611115555'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('prod-role-image'); - expect(roles[5].querySelector('input[type="submit"]').value).to.eq('b-prod-image | 666611114444'); - }) - }) - }) - - context('showOnlyMatchingRoles', () => { - it('appends 3 roles but one of them already exists', () => { - loadFixtures('awsmc-federated-switched', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.showOnlyMatchingRoles = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(6); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[0].querySelector('input[type="submit"]').value).to.eq('b-renpou | 666611115555'); - expect(roles[4].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[5].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - }) - }) - - context('hidesHistory and showOnlyMatchingRoles', () => { - it('appends 3 roles but one of them already exists', () => { - loadFixtures('awsmc-federated-switched', 'data'); - document.getElementById('awsc-login-display-name-account').textContent = '6666-1111-2222'; - chrome.storage.sync.data.hidesHistory = true; - chrome.storage.sync.data.showOnlyMatchingRoles = true; - extendIAMFormList(); - - expect(document.body.className.includes('user-type-federated')).to.be.true; - expect(document.body.className.includes('user-type-iam')).to.be.false; - - const roles = Array.from(document.querySelectorAll('#awsc-username-menu-recent-roles li')) - expect(roles.length).to.eq(3); - expect(roles[0].querySelector('input[name="roleName"]').value).to.eq('independence_role'); - expect(roles[1].querySelector('input[name="roleName"]').value).to.eq('contained_history_role'); - expect(roles[2].querySelector('input[name="roleName"]').value).to.eq('renpou'); - expect(roles[2].querySelector('input[type="submit"]').value).to.eq('b-renpou | 666611115555'); - }) - }) - }) -}) diff --git a/test/browser/fixtures/awsmc-exclude-unrelated-profile-from-history.html b/test/browser/fixtures/awsmc-exclude-unrelated-profile-from-history.html deleted file mode 100644 index 6f8c34f..0000000 --- a/test/browser/fixtures/awsmc-exclude-unrelated-profile-from-history.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - diff --git a/test/browser/fixtures/awsmc-federated-switched.html b/test/browser/fixtures/awsmc-federated-switched.html deleted file mode 100644 index f6d0efb..0000000 --- a/test/browser/fixtures/awsmc-federated-switched.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/test/browser/fixtures/awsmc-federated.html b/test/browser/fixtures/awsmc-federated.html deleted file mode 100644 index 833d7c3..0000000 --- a/test/browser/fixtures/awsmc-federated.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/test/browser/fixtures/awsmc-iam-initial.html b/test/browser/fixtures/awsmc-iam-initial.html deleted file mode 100644 index 830628c..0000000 --- a/test/browser/fixtures/awsmc-iam-initial.html +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - diff --git a/test/browser/fixtures/awsmc-iam-switched.html b/test/browser/fixtures/awsmc-iam-switched.html deleted file mode 100644 index ba5f2eb..0000000 --- a/test/browser/fixtures/awsmc-iam-switched.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/test/browser/fixtures/awsmc-iam.html b/test/browser/fixtures/awsmc-iam.html deleted file mode 100644 index 8215cd0..0000000 --- a/test/browser/fixtures/awsmc-iam.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/test/browser/fixtures/data.json b/test/browser/fixtures/data.json deleted file mode 100644 index 1c6ec4c..0000000 --- a/test/browser/fixtures/data.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "profiles": [ - { "profile": "independence", "aws_account_id": "111122223333", "role_name": "independence_role" }, - { "profile": "history-contained", "aws_account_id": "111122224444", "role_name": "contained_history_role" }, - { "profile": "base-a", "aws_account_id": "555511112222" }, - { "profile": "a-stg", "aws_account_id": "555511113333", "role_name": "stg-role", "source_profile": "base-a", "color": "00ddff" }, - { "profile": "a-prod", "aws_account_id": "555511114444", "role_name": "prod-role", "source_profile": "base-a", "region": "ap-northwest-1" }, - { "profile": "base-b", "aws_account_id": "666611112222" }, - { "profile": "b-stg", "aws_account_id": "666611113333", "role_name": "stg-role", "source_profile": "base-b" }, - { "profile": "b-prod", "aws_account_id": "666611114444", "role_name": "prod-role", "source_profile": "base-b", "color": "ffcc333" }, - { "profile": "b-renpou", "aws_account_id": "666611115555", "role_name": "renpou", "source_profile": "base-b" }, - { "profile": "a-stg-image", "aws_account_id": "555511113333", "role_name": "stg-role-image", "source_profile": "base-a", "image": "not-found.png" }, - { "profile": "b-prod-image", "aws_account_id": "666611114444", "role_name": "prod-role-image", "source_profile": "base-b", "image": "not-found.png" } - ] -} diff --git a/test/browser/fixtures/popup-config-text.html b/test/browser/fixtures/popup-config-text.html deleted file mode 100644 index 1e5b368..0000000 --- a/test/browser/fixtures/popup-config-text.html +++ /dev/null @@ -1,25 +0,0 @@ -