Пример #1
0
        public void SubtokenInfo_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder()
                           .UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            var actual = Assert.IsType <SubtokenInfo>(JsonConvert.DeserializeObject <TokenInfo>(_fixture.SubtokenInfoJson, settings));

            Assert.NotEmpty(actual.Id);

            // Your API key must be named GW2SDK-Full to pass this test
            // This is not intended to improve account security, only to prevent key abuse
            // The reason is that some services like GW2BLTC.com associate keys with logins but require you to use a key name of their choice
            // If this key leaks to the outside world, it still can't be (ab)used to login with GW2BLTC.com or similar sites
            Assert.Equal("GW2SDK-Full", actual.Name);

            var expectedPermissions = Enum.GetValues(typeof(Permission)).Cast <Permission>().ToHashSet();

            Assert.Equal(expectedPermissions, actual.Permissions.ToHashSet());

            // Ensure that the IssuedAt date is close to the Date response header
            // Allow up to 1 minute of delays to compensate for latency issues
            var low = _fixture.CreatedSubtokenDate - TimeSpan.FromMinutes(1);

            Assert.InRange(actual.IssuedAt, low, _fixture.CreatedSubtokenDate);

            Assert.Equal(_fixture.ExpiresAt, actual.ExpiresAt);

            Assert.Equal(_fixture.Urls, actual.Urls.Select(url => Uri.UnescapeDataString(url.ToString())).ToList());
        }
Пример #2
0
        public void Items_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder()
                           .UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            AssertEx.ForEach(_fixture.Db.Items,
                             json =>
            {
                var actual = JsonConvert.DeserializeObject <Item>(json, settings);

                ItemFacts.Id_is_positive(actual);
                ItemFacts.Vendor_value_cannot_be_negative(actual);
                switch (actual)
                {
                case Consumable consumable:
                    ItemFacts.Consumable_level_is_between_0_and_80(consumable);
                    switch (consumable)
                    {
                    case Transmutation transmutation:
                        ItemFacts.Transmutation_skins_cannot_be_empty(transmutation);
                        break;
                    }

                    break;

                case Weapon weapon:
                    ItemFacts.Weapon_level_is_between_0_and_80(weapon);
                    ItemFacts.Weapon_min_power_cannot_be_negative(weapon);
                    ItemFacts.Weapon_max_power_cannot_be_negative(weapon);
                    ItemFacts.Weapon_defense_cannot_be_negative(weapon);
                    ItemFacts.Weapon_infix_upgrade_id_is_positive(weapon);
                    ItemFacts.Weapon_infix_upgrade_modifiers_are_positive(weapon);
                    break;

                case BackItem backItem:
                    ItemFacts.Back_item_level_is_between_0_and_80(backItem);
                    ItemFacts.Back_item_infix_upgrade_id_is_positive(backItem);
                    ItemFacts.Back_item_infix_upgrade_modifiers_are_positive(backItem);
                    ItemFacts.Back_item_suffix_item_id_is_null_or_positive(backItem);
                    break;

                case Armor armor:
                    ItemFacts.Armor_level_is_between_0_and_80(armor);
                    ItemFacts.Armor_defense_cannot_be_negative(armor);
                    ItemFacts.Armor_infix_upgrade_id_is_positive(armor);
                    ItemFacts.Armor_infix_upgrade_modifiers_are_positive(armor);
                    ItemFacts.Armor_suffix_item_id_is_null_or_positive(armor);
                    ItemFacts.Armor_stat_choices_are_null_or_not_empty(armor);
                    break;

                case Trophy trophy:
                    ItemFacts.Trophy_level_is_between_0_and_80(trophy);
                    break;
                }
            });
        }
Пример #3
0
        public void Subtokens_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder()
                           .UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            var actual = JsonConvert.DeserializeObject <CreatedSubtoken>(_fixture.CreatedSubtoken, settings);

            Assert.NotEmpty(actual.Subtoken);
        }
Пример #4
0
        public void Build_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder()
                           .UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            var actual = JsonConvert.DeserializeObject <Build>(_fixture.Build, settings);

            BuildFact.Id_is_positive(actual);
        }
Пример #5
0
        public void Bank_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder().UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            var actual = JsonConvert.DeserializeObject <Bank>(_fixture.Bank, settings);

            Assert.NotNull(actual);
            Assert.NotEmpty(actual);
            Assert.Equal(0, actual.Count % 30);
        }
Пример #6
0
        public void Achievement_categories_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder().UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            AssertEx.ForEach(_fixture.Db.AchievementCategories,
                             json =>
            {
                var actual = JsonConvert.DeserializeObject <AchievementCategory>(json, settings);
                AchievementCategoryFact.Order_is_not_negative(actual);
            });
        }
Пример #7
0
        public void Colors_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder()
                           .UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            AssertEx.ForEach(_fixture.Db.Colors,
                             json =>
            {
                var actual = JsonConvert.DeserializeObject <Color>(json, settings);
                ColorFact.Base_rgb_contains_red_green_blue(actual);
            });
        }
Пример #8
0
        public void Skins_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder().UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            AssertEx.ForEach(_fixture.Db.Skins,
                             json =>
            {
                var actual = JsonConvert.DeserializeObject <Skin>(json, settings);

                SkinFact.Id_is_positive(actual);
            });
        }
Пример #9
0
        public void Floors_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder().UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            AssertEx.ForEach(_fixture.Db.Floors,
                             json =>
            {
                var actual = JsonConvert.DeserializeObject <Floor>(json, settings);

                FloorFact.Texture_dimensions_contains_width_and_height(actual);
                FloorFact.Label_coordinates_of_a_region_contains_a_point(actual);
                FloorFact.Continent_rectangle_of_a_region_contains_2_points(actual);
            });
        }
Пример #10
0
        public void Worlds_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder()
                           .UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            AssertEx.ForEach(_fixture.Db.Worlds,
                             json =>
            {
                var actual = JsonConvert.DeserializeObject <World>(json, settings);

                WorldFact.Id_is_positive(actual);
                WorldFact.Name_is_not_empty(actual);
                WorldFact.World_population_type_is_supported(actual);
            });
        }
Пример #11
0
        public void Recipes_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder()
                           .UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            AssertEx.ForEach(_fixture.Db.Recipes,
                             json =>
            {
                var actual = JsonConvert.DeserializeObject <Recipe>(json, settings);

                RecipeFact.Id_is_positive(actual);
                RecipeFact.Output_item_id_is_positive(actual);
                RecipeFact.Output_item_count_is_positive(actual);
                RecipeFact.Min_rating_is_between_0_and_500(actual);
                RecipeFact.Time_to_craft_is_positive(actual);
            });
        }
Пример #12
0
        public void ApiKeyInfo_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder()
                           .UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            var actual = Assert.IsType <ApiKeyInfo>(JsonConvert.DeserializeObject <TokenInfo>(_fixture.ApiKeyInfoJson, settings));

            Assert.NotEmpty(actual.Id);

            // Your API key must be named GW2SDK-Full to pass this test
            // This is not intended to improve account security, only to prevent key abuse
            // The reason is that some services like GW2BLTC.com associate keys with logins but require you to use a key name of their choice
            // If this key leaks to the outside world, it can't be (ab)used to login with GW2BLTC.com or similar sites
            Assert.Equal("GW2SDK-Full", actual.Name);

            var expectedPermissions = Enum.GetValues(typeof(Permission)).Cast <Permission>().ToHashSet();

            Assert.Equal(expectedPermissions, actual.Permissions.ToHashSet());
        }
Пример #13
0
        public void Achievements_can_be_created_from_json()
        {
            var settings = new JsonSerializerSettingsBuilder().UseTraceWriter(new XunitTraceWriter(_output))
                           .UseMissingMemberHandling(MissingMemberHandling.Error)
                           .Build();

            AssertEx.ForEach(_fixture.Db.Achievements,
                             json =>
            {
                var actual = JsonConvert.DeserializeObject <Achievement>(json, settings);

                AchievementFact.Name_is_not_empty(actual);
                AchievementFact.Description_is_not_null(actual);
                AchievementFact.Requirement_is_not_null(actual);
                AchievementFact.LockedText_is_not_null(actual);
                AchievementFact.Flags_is_not_empty(actual);
                AchievementFact.Tiers_is_not_empty(actual);
                AchievementFact.Tiers_does_not_contain_null(actual);
                AchievementFact.Rewards_does_not_contain_null(actual);
                AchievementFact.Bits_does_not_contain_null(actual);
                AchievementFact.PointCap_is_negative_1_for_repeatable_achievements_without_points(actual);
            });
        }