Example #1
0
        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();
        }
Example #2
0
        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,
Example #3
0
        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);
        }