Browse Source

faucet init: export info to output.json to use in start.sh

Mokhtar Naamani 3 years ago
parent
commit
6430138e3c

+ 2 - 0
start.sh

@@ -49,6 +49,8 @@ if [[ $SKIP_CHAIN_SETUP != 'true' ]]; then
   ./tests/integration-tests/run-test-scenario.sh ${INIT_CHAIN_SCENARIO}
 
   ## Member faucet
+  export SCREENING_AUTHORITY_SEED=$(cat ./tests/integration-tests/output.json | jq -r .faucet.suri)
+  export INVITING_MEMBER_ID=$(cat ./tests/integration-tests/output.json | jq -r .faucet.memberId)
   docker-compose up -d faucet
 
   ## Storage Infrastructure Nodes

+ 20 - 0
tests/integration-tests/src/Api.ts

@@ -69,6 +69,11 @@ import {
 } from './consts'
 import { CategoryId } from '@joystream/types/forum'
 
+export type FaucetInfo = {
+  suri: string
+  memberId: number
+}
+
 export type KeyGenInfo = {
   start: number
   final: number
@@ -101,6 +106,8 @@ export class ApiFactory {
   // source of funds for all new accounts
   private readonly treasuryAccount: string
 
+  public faucetInfo: FaucetInfo
+
   public static async create(
     provider: WsProvider,
     treasuryAccountUri: string,
@@ -141,6 +148,7 @@ export class ApiFactory {
     this.addressesToKeyId = new Map()
     this.addressesToSuri = new Map()
     this.keyId = 0
+    this.faucetInfo = { suri: '', memberId: 0 }
   }
 
   public getApi(label: string): Api {
@@ -197,6 +205,10 @@ export class ApiFactory {
     }
     return suri
   }
+
+  public setFaucetInfo(info: FaucetInfo): void {
+    this.faucetInfo = info
+  }
 }
 
 export class Api {
@@ -1069,4 +1081,12 @@ export class Api {
       params: details.event.data[3] as VideoCreationParameters,
     }
   }
+
+  public setFaucetInfo(info: FaucetInfo): void {
+    this.factory.setFaucetInfo(info)
+  }
+
+  public getFaucetInfo(): FaucetInfo {
+    return this.factory.faucetInfo
+  }
 }

+ 6 - 2
tests/integration-tests/src/Scenario.ts

@@ -1,5 +1,5 @@
 import { WsProvider } from '@polkadot/api'
-import { ApiFactory, Api, KeyGenInfo } from './Api'
+import { ApiFactory, Api, KeyGenInfo, FaucetInfo } from './Api'
 import { QueryNodeApi } from './QueryNodeApi'
 import { config } from 'dotenv'
 import { ApolloClient, InMemoryCache, HttpLink } from '@apollo/client'
@@ -23,6 +23,7 @@ type TestsOutput = {
   accounts: { [k: string]: number }
   keyIds: KeyGenInfo
   miniSecret: string
+  faucet: FaucetInfo
 }
 
 function writeOutput(api: Api, miniSecret: string) {
@@ -33,10 +34,13 @@ function writeOutput(api: Api, miniSecret: string) {
   // first and last key id used to generate keys in this scenario
   const keyIds = api.keyGenInfo()
 
+  const faucet = api.getFaucetInfo()
+
   const output: TestsOutput = {
     accounts,
     keyIds,
     miniSecret,
+    faucet,
   }
 
   fs.writeFileSync(OUTPUT_FILE_PATH, JSON.stringify(output, undefined, 2))
@@ -44,7 +48,7 @@ function writeOutput(api: Api, miniSecret: string) {
 
 export async function scenario(label: string, scene: (props: ScenarioProps) => Promise<void>): Promise<void> {
   // Load env variables
-  config()
+  config({ path: './.env' })
   const env = process.env
 
   // Connect api to the chain

+ 15 - 6
tests/integration-tests/src/flows/faucet/initFaucet.ts

@@ -11,12 +11,18 @@ export default async function initFaucet({ api, env, query }: FlowProps): Promis
   const debug = extendDebug('flow:initFaucet')
   debug('Started')
 
+  const invitesToTransfer = 100
   // Get membership working group leader
   const membershipWorkingGroup = 'membershipWorkingGroup'
   const [, membershipLeader] = await api.getLeader(membershipWorkingGroup)
 
   // Grant lead invitation quota
-  const setLeaderInvitationQuotaFixture = new SetLeaderInvitationQuotaFixture(api, query, membershipWorkingGroup, 50)
+  const setLeaderInvitationQuotaFixture = new SetLeaderInvitationQuotaFixture(
+    api,
+    query,
+    membershipWorkingGroup,
+    invitesToTransfer + 10
+  )
   await new FixtureRunner(setLeaderInvitationQuotaFixture).runWithQueryNodeChecks()
 
   // The membership working group should have a budget allocated
@@ -25,23 +31,26 @@ export default async function initFaucet({ api, env, query }: FlowProps): Promis
   await new FixtureRunner(setGroupBudgetFixture).runWithQueryNodeChecks()
 
   // Create a membership account for faucet
-  const faucetAccounts = [api.createCustomKeyPair(env.SCREENING_AUTHORITY_SEED || '//Faucet').address]
-  const happyCaseFixture = new BuyMembershipHappyCaseFixture(api, query, faucetAccounts)
+  const faucetSuri = env.SCREENING_AUTHORITY_SEED || '//Faucet'
+  const faucetAccount = api.createCustomKeyPair(faucetSuri, true).address
+  const happyCaseFixture = new BuyMembershipHappyCaseFixture(api, query, [faucetAccount])
   await new FixtureRunner(happyCaseFixture).runWithQueryNodeChecks()
   const [faucetMemberId] = happyCaseFixture.getCreatedMembers()
 
   // Give the faucet member accounts some funds (they need some funds for extrinsics)
-  await api.treasuryTransferBalanceToAccounts(faucetAccounts, new BN(200))
+  await api.treasuryTransferBalanceToAccounts([faucetAccount], new BN(200))
 
   // Use the above membershipLeader to give faucet account permission to invite other members
   const transferInvitesHappyCaseFixture = new TransferInvitesHappyCaseFixture(
     api,
     query,
     { memberId: membershipLeader.member_id, account: membershipLeader.role_account_id.toString() },
-    { memberId: faucetMemberId, account: faucetAccounts[0] },
-    10
+    { memberId: faucetMemberId, account: faucetAccount },
+    invitesToTransfer
   )
   await new FixtureRunner(transferInvitesHappyCaseFixture).runWithQueryNodeChecks()
 
+  api.setFaucetInfo({ suri: faucetSuri, memberId: faucetMemberId.toNumber() })
+
   debug('Done')
 }