public void RemoveSkillFromResource_TheResourceShouldRemainOneSkillLess()
        {
            var resource = CreateSampleResource();
            var skill    = CreateSampleSkill();
            var skill2   = CreateSampleSkill();


            var resourceService = new ResourceService(RavenSession);

            resourceService.AddSkillForAResource(resource, skill, 2);
            resourceService.AddSkillForAResource(resource, skill2, 3);

            RavenSession.SaveChanges();

            var fetchedResource = RavenSession.Load <Resource>(resource.Id);

            Assert.AreEqual(2, fetchedResource.Skills.Count);

            resourceService.RemoveSkillFromResource(resource, skill);

            RavenSession.SaveChanges();

            var fetchedResource2 = RavenSession.Load <Resource>(resource.Id);

            Assert.AreEqual(1, fetchedResource2.Skills.Count);
        }
        public void AddSkillsForAResources_AddTheSameSkillTwice_AnExceptionShouldBeThrown()
        {
            var resource = CreateSampleResource();
            var skill    = CreateSampleSkill();

            var resourceService = new ResourceService(RavenSession);

            resourceService.AddSkillForAResource(resource, skill, 2);
            resourceService.AddSkillForAResource(resource, skill, 3);
        }
        public void AddResource_AddSkills_FetchAndVerify()
        {
            //Setup
            var resource = Builder <Resource> .CreateNew().With(a => a.Id, "ResourceId1").Build();

            var sampleSkills = Builder <Skill> .CreateListOfSize(5).Build();

            var resourceService = new ResourceService(RavenSession);

            foreach (var resoureSkill in sampleSkills)
            {
                resourceService.AddSkillForAResource(resource, resoureSkill, 4);
            }

            //Act
            RavenSession.Store(resource);
            RavenSession.SaveChanges();

            //Verify

            var fetchedResource =
                RavenSession.Query <Resource>().FirstOrDefault(a => a.Id == resource.Id);

            Assert.IsNotNull(fetchedResource);
            Assert.AreEqual(5, resource.Skills.Count());
            Assert.AreEqual(4, resource.Skills.First().Strength);
        }
        public void AddSkillsForAResource_MakeSureDuplicateAreHandled()
        {
            //Setup
            var resource = CreateSampleResource();
            var skill    = CreateSampleSkill();

            //Act
            var resourceService = new ResourceService(RavenSession);

            resourceService.AddSkillForAResource(resource, skill, 4);

            var resource2 = CreateSampleResource();

            resourceService.AddSkillForAResource(resource2, skill, 3);

            RavenSession.SaveChanges();

            var skills = RavenSession.Query <Skill>().Where(a => a.Name == skill.Name);

            //Assert
            Assert.AreEqual(1, skills.Count());
        }
        public void AddResourceForSkill_MakeSureResourceIsSavedOnlyOnce()
        {
            var resource = CreateSampleResource();
            RavenSession.Store(resource);
            RavenSession.SaveChanges();

            var resources = RavenSession.Query<Resource>().ToList();
            Assert.AreEqual(1 , resources.Count);

            var resourceService = new ResourceService(RavenSession);
            resourceService.AddSkillForAResource(resource , CreateSampleSkill() , 5);

            RavenSession.SaveChanges();
            var resourcesAgain = RavenSession.Query<Resource>().ToList();
            Assert.AreEqual(1, resourcesAgain.Count);
            Assert.AreEqual(1 , resourcesAgain.First().Skills.Count());
        }
        public void AddResourceForSkill_MakeSureResourceIsSavedOnlyOnce()
        {
            var resource = CreateSampleResource();

            RavenSession.Store(resource);
            RavenSession.SaveChanges();

            var resources = RavenSession.Query <Resource>().ToList();

            Assert.AreEqual(1, resources.Count);

            var resourceService = new ResourceService(RavenSession);

            resourceService.AddSkillForAResource(resource, CreateSampleSkill(), 5);

            RavenSession.SaveChanges();
            var resourcesAgain = RavenSession.Query <Resource>().ToList();

            Assert.AreEqual(1, resourcesAgain.Count);
            Assert.AreEqual(1, resourcesAgain.First().Skills.Count());
        }
        public void AddResource_AddSkills_FetchAndVerify()
        {
            //Setup
            var resource = Builder<Resource>.CreateNew().With(a=>a.Id ,"ResourceId1").Build();
            var sampleSkills = Builder<Skill>.CreateListOfSize(5).Build();
            var resourceService = new ResourceService(RavenSession);
            foreach (var resoureSkill in sampleSkills)
            {
                resourceService.AddSkillForAResource(resource , resoureSkill , 4);
            }

            //Act
            RavenSession.Store(resource);
            RavenSession.SaveChanges();

            //Verify

            var fetchedResource =
                RavenSession.Query<Resource>().FirstOrDefault(a => a.Id == resource.Id);
            Assert.IsNotNull(fetchedResource);
            Assert.AreEqual(5, resource.Skills.Count());
            Assert.AreEqual(4, resource.Skills.First().Strength);
        }
        public void AddSkillsForAResources_AddTheSameSkillTwice_AnExceptionShouldBeThrown()
        {
            var resource = CreateSampleResource();
            var skill = CreateSampleSkill();

            var resourceService = new ResourceService(RavenSession);
            resourceService.AddSkillForAResource(resource, skill, 2);
            resourceService.AddSkillForAResource(resource, skill, 3);
        }
        public void RemoveSkillFromResource_TheResourceShouldRemainOneSkillLess()
        {
            var resource = CreateSampleResource();
            var skill = CreateSampleSkill();
            var skill2 = CreateSampleSkill();

            var resourceService = new ResourceService(RavenSession);

            resourceService.AddSkillForAResource(resource, skill, 2);
            resourceService.AddSkillForAResource(resource, skill2, 3);

            RavenSession.SaveChanges();

            var fetchedResource = RavenSession.Load<Resource>(resource.Id);
            Assert.AreEqual(2 , fetchedResource.Skills.Count);

            resourceService.RemoveSkillFromResource(resource, skill);

            RavenSession.SaveChanges();

            var fetchedResource2 = RavenSession.Load<Resource>(resource.Id);
            Assert.AreEqual(1, fetchedResource2.Skills.Count);
        }
        public void AddSkillsForAResource_MakeSureDuplicateAreHandled()
        {
            //Setup
            var resource = CreateSampleResource();
            var skill = CreateSampleSkill();

            //Act
            var resourceService = new ResourceService(RavenSession);
            resourceService.AddSkillForAResource(resource, skill, 4);

            var resource2 = CreateSampleResource();
            resourceService.AddSkillForAResource(resource2, skill, 3);

            RavenSession.SaveChanges();

            var skills = RavenSession.Query<Skill>().Where(a=>a.Name == skill.Name);

            //Assert
            Assert.AreEqual(1, skills.Count());
        }