public async Task AddMonster_WhenRepositoryIsEmptyAndNewMonsterLacksId_ShouldAddMonsterAndReturnIt()
        {
            // Setup
            var monsters   = Enumerable.Empty <Monster>();
            var expected   = new Monster("awake 1", "name 1", 3, Element.Fire, "awakenedimg", "img", null, null, null, null, null);
            var originalId = expected.Id;

            fixture = new MonsterRepository(monsters);

            // Execute
            var actual = await fixture.AddMonster(expected);

            // Verify
            actual.Should().BeEquivalentTo(expected, options => options.Excluding(monster => monster.Id));
            actual.Id.Should().NotBe(originalId);
        }
        public async Task AddMonster_WhenRepositoryIsEmptyAndNewMonsterHasExistingId_ShouldAddMonsterWithIdAndReturnIt()
        {
            // Setup
            var monsters = Enumerable.Empty <Monster>();
            var expected = new Monster("awake 1", "name 1", 3, Element.Wind, "awakenedimg", "img", null, null, null, null, null)
            {
                Id = Guid.Parse("2e846d8d-a45d-4548-9240-e2ed7fa91e3c")
            };

            fixture = new MonsterRepository(monsters);

            // Execute
            var actual = await fixture.AddMonster(expected);

            // Verify
            actual.Should().BeEquivalentTo(expected);
        }
        public async Task AddMonster_WhenRepositoryIsEmptyAndNewMonsterHasNumberZero_ShouldAddMonsterWithNumberAndReturnIt()
        {
            // Setup
            var monsters   = Enumerable.Empty <Monster>();
            var newMonster = new Monster("awake 1", "name 1", 3, Element.Wind, "awakenedimg", "img", null, null, null, null, null);
            var expected   = new Monster("awake 1", "name 1", 3, Element.Wind, "awakenedimg", "img", null, null, null, null, null)
            {
                Number = 1
            };

            fixture = new MonsterRepository(monsters);

            // Execute
            var actual = await fixture.AddMonster(newMonster);

            // Verify
            actual.Should().BeEquivalentTo(expected, options => options.Excluding(monster => monster.Id));
        }
        public async Task AddMonster_WhenRepositoryHasExactMonster_ShouldJustReturnExistingMonster()
        {
            // Setup
            var existingMonsterWithNewValues = new Monster("new awake 1", "new name 1", 3, Element.Wind, "new awakenedimg1", "new img1", null, null, null, null, null)
            {
                Id = Guid.Parse("6beb6507-f68d-4d3d-8abf-0e04015c1119")
            };
            var expected = new Monster("awake 1", "name 1", 4, Element.Light, "awakenedimg", "img", null, null, null, null, null)
            {
                Id = Guid.Parse("6beb6507-f68d-4d3d-8abf-0e04015c1119")
            };
            var monsters = new Monster[]
            {
                expected
            };

            fixture = new MonsterRepository(monsters);

            // Execute
            var actual = await fixture.AddMonster(existingMonsterWithNewValues);

            // Verify
            actual.Should().BeEquivalentTo(expected);
        }