public GraphQLTestBase(ITestOutputHelper output) { Log.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.Console().CreateLogger(); _output = output; var goldCurrency = new Currency("NCG", 2, minter: null); var fixturePath = Path.Combine("..", "..", "..", "..", "Lib9c", ".Lib9c.Tests", "Data", "TableCSV"); var sheets = TableSheetsImporter.ImportSheets(fixturePath); var blockAction = new RewardGold(); var genesisBlock = BlockChain <NCAction> .MakeGenesisBlock( new NCAction[] { new InitializeStates( rankingState: new RankingState(), shopState: new ShopState(), gameConfigState: new GameConfigState(sheets[nameof(GameConfigSheet)]), redeemCodeState: new RedeemCodeState(Bencodex.Types.Dictionary.Empty .Add("address", RedeemCodeState.Address.Serialize()) .Add("map", Bencodex.Types.Dictionary.Empty) ), adminAddressState: new AdminState(AdminAddress, 10000), activatedAccountsState: new ActivatedAccountsState(), goldCurrencyState: new GoldCurrencyState(goldCurrency), goldDistributions: new GoldDistribution[] { }, tableSheets: sheets, pendingActivationStates: new PendingActivationState[] { } ), }, blockAction : blockAction); var ncService = ServiceBuilder.CreateNineChroniclesNodeService(genesisBlock, new PrivateKey()); var tempKeyStorePath = Path.Join(Path.GetTempPath(), Path.GetRandomFileName()); var keyStore = new Web3KeyStore(tempKeyStorePath); StandaloneContextFx = new StandaloneContext { KeyStore = keyStore, }; ncService.ConfigureContext(StandaloneContextFx); var configurationBuilder = new ConfigurationBuilder(); var configuration = configurationBuilder.Build(); var services = new ServiceCollection(); services.AddSingleton(StandaloneContextFx); services.AddSingleton <IConfiguration>(configuration); services.AddGraphTypes(); services.AddLibplanetExplorer <NCAction>(); services.AddSingleton <StateQuery>(); services.AddSingleton(ncService); ServiceProvider serviceProvider = services.BuildServiceProvider(); Schema = new StandaloneSchema(serviceProvider); DocumentExecutor = new DocumentExecuter(); }
public void ExecuteCreateNextWeeklyArenaState() { var weekly = new WeeklyArenaState(0); var state = _baseState .SetState(weekly.address, weekly.Serialize()); var action = new RewardGold(); var nextState = action.Execute(new ActionContext() { PreviousStates = state, Miner = default,
public void WeeklyArenaRankingBoard(bool resetCount, bool updateNext) { var weekly = new WeeklyArenaState(0); weekly.Set(_avatarState, _tableSheets.CharacterSheet); weekly[_avatarState.address].Update(weekly[_avatarState.address], BattleLog.Result.Lose); var gameConfigState = new GameConfigState(); gameConfigState.Set(_tableSheets.GameConfigSheet); var state = _baseState .SetState(weekly.address, weekly.Serialize()) .SetState(gameConfigState.address, gameConfigState.Serialize()); var blockIndex = 0; if (resetCount) { blockIndex = gameConfigState.DailyArenaInterval; } if (updateNext) { weekly[_avatarState.address].Activate(); blockIndex = gameConfigState.WeeklyArenaInterval; // Avoid NRE in test case. var nextWeekly = new WeeklyArenaState(1); state = state .SetState(weekly.address, weekly.Serialize()) .SetState(nextWeekly.address, nextWeekly.Serialize()); } Assert.False(weekly.Ended); Assert.Equal(4, weekly[_avatarState.address].DailyChallengeCount); var action = new RewardGold(); var ctx = new ActionContext() { BlockIndex = blockIndex, PreviousStates = _baseState, Miner = default,
public void TargetBlock() { var rb = new RankingBattle { avatarAddress = _avatar1Address, enemyAddress = _avatar3Address, weeklyArenaAddress = _weeklyArenaAddress, costumeIds = new List <Guid>(), equipmentIds = new List <Guid>(), }; var arenaInfoAddress = _weeklyArenaAddress.Derive(_avatar1Address.ToByteArray()); var arenaInfo2Address = _weeklyArenaAddress.Derive(_avatar2Address.ToByteArray()); var arenaInfo3Address = _weeklyArenaAddress.Derive(_avatar3Address.ToByteArray()); var listAddress = _weeklyArenaAddress.Derive("address_list"); Assert.False(_initialState.TryGetState(arenaInfoAddress, out Dictionary _)); Assert.False(_initialState.TryGetState(arenaInfo2Address, out Dictionary _)); Assert.False(_initialState.TryGetState(arenaInfo3Address, out Dictionary _)); Assert.False(_initialState.TryGetState(listAddress, out List _)); var testRandom = new TestRandom(); var blockIndex = RankingBattle.UpdateTargetBlockIndex; var nextState = rb.Execute(new ActionContext { PreviousStates = _initialState, Signer = _agent1Address, Random = testRandom, Rehearsal = false, BlockIndex = blockIndex, }); Assert.True(nextState.TryGetState(arenaInfoAddress, out Dictionary rawInfo)); Assert.True(nextState.TryGetState(arenaInfo3Address, out Dictionary _)); Assert.True(nextState.TryGetState(listAddress, out List rawList)); var info = new ArenaInfo(rawInfo); var addressList = rawList.ToList(StateExtensions.ToAddress); Assert.Equal(4, info.DailyChallengeCount); Assert.Contains(_avatar1Address, addressList); Assert.DoesNotContain(_avatar2Address, addressList); Assert.Contains(_avatar3Address, addressList); var rg = new RewardGold(); var updatedState = rg.Execute(new ActionContext { PreviousStates = nextState, Signer = _agent1Address, Random = testRandom, Rehearsal = false, BlockIndex = blockIndex, }); Assert.True(updatedState.TryGetState(arenaInfoAddress, out Dictionary updatedRawInfo)); Assert.True(updatedState.TryGetState(arenaInfo2Address, out Dictionary _)); Assert.True(updatedState.TryGetState(arenaInfo3Address, out Dictionary _)); Assert.True(updatedState.TryGetState(listAddress, out List updatedRawList)); var updatedInfo = new ArenaInfo(updatedRawInfo); var updatedAddressList = updatedRawList.ToList(StateExtensions.ToAddress); Assert.Equal(5, updatedInfo.DailyChallengeCount); Assert.Contains(_avatar1Address, updatedAddressList); Assert.Contains(_avatar2Address, updatedAddressList); Assert.Contains(_avatar3Address, updatedAddressList); }