public void BuildingManager_Can_Set_Cotractor_For_Maitenance()
        {
            // Arrange
            MaintenanceRequest maintenanceRequest = new MaintenanceRequest(person, "Kvar", "Ne radi grijanje.", "Stan Mile, prvi kat.");

            RepairService serviceTypeForMock = new RepairService("Ličenje");
            Mock<IRepairServicesRepository> repairServicesRepositoryMock = new Mock<IRepairServicesRepository>();
            repairServicesRepositoryMock.Setup(x => x.GetById(23)).Returns(serviceTypeForMock);

            RepairService serviceType = repairServicesRepositoryMock.Object.GetById(23);
            Maintenance maintenance = new Maintenance(maintenanceRequest, Urgency.High, serviceType, building);

            LegalPerson legalPerson = new LegalPerson("12345678901", "Mile d.o.o.");
            Contractor contractor = new Contractor(legalPerson).AddRepairService(serviceType);

            BuildingManager buildingManager = maintenance.BuildingManager;
            buildingManager.AddContractor(contractor);

            // Act
            maintenance.SetContractor(contractor);

            // Assert
            var personSnapshot = new PersonSnapshot(contractor.LegalPerson);
            Assert.IsNotNull(maintenance.Contractor);
            Assert.AreEqual(personSnapshot.Oib, maintenance.Contractor.Oib, "Oibs aren't equal.");
            Assert.AreEqual(personSnapshot.FullName, maintenance.Contractor.FullName, "FullNames aren't equal.");
            Assert.AreEqual(personSnapshot.Address, maintenance.Contractor.Address, "Addresses aren't equal.");
            Assert.AreEqual(personSnapshot, maintenance.Contractor);
        }
        public void Can_Save_Maintenance_To_DB()
        {
            // Arrange
            var person = new PhysicalPerson("12345678901", "Ime", "Prezime");
            MaintenanceRequest maintenanceRequest = new MaintenanceRequest(
                person
                , "Kvar na grijanju"
                , "Grijanje ne radi"
                , "Prvi kat, stan 2");

            City city = new City(10000, "Zagreb");
            Cadastre cadastre = new Cadastre("Trnje", "12345", city);
            CadastralParticle cadastralParticle = new CadastralParticle(cadastre, "123", 23, "Opis");
            LandRegistry landRegistry = new LandRegistry(cadastralParticle);

            var partitionSpace = landRegistry.CreatePartitionSpace("123", 12, "Opis etaže", person);

            LegalPerson legalPerson = new LegalPerson("12345678902", "Ime");
            BuildingManager buildingManager = new BuildingManager(legalPerson);

            Building building = new Building(buildingManager) {
                LandRegistry = landRegistry
            };

            RepairService repairService = new RepairService("Popravak grijanja");

            Maintenance maintenance = new Maintenance(maintenanceRequest, Urgency.Normal, repairService, building);

            IMaintenancesRepository maintenancesRepository = new MaintenancesNHRepository(SessionFactory);

            // Act
            IList<Maintenance> maintenancesFromDb = null;
            using (var session = SessionFactory.OpenSession()) {
                using (var tx = session.BeginTransaction()) {
                    session.Save(person);
                    session.Save(city);
                    session.Save(legalPerson);
                    session.Save(cadastre);
                    session.Save(landRegistry);
                    session.Save(buildingManager);
                    session.Save(building);
                    session.Save(repairService);

                    maintenancesRepository.SaveOrUpdate(maintenance);

                    tx.Commit();
                }

                using (var tx = session.BeginTransaction()) {
                    maintenancesFromDb = maintenancesRepository.GetAll().ToList();
                    tx.Commit();
                }
            }

            // Assert
            Assert.IsTrue(maintenancesFromDb.Count == 1, "No Maintenance from database.");
        }
 /// <summary>
 /// Konstruktor
 /// </summary>
 /// <param name="maintenanceRequest">zahtjev za popravkom</param>
 /// <param name="urgency">hitnost</param>
 /// <param name="serviceType">tip servisa/usluge</param>
 /// <param name="building">zgrada za koju se prijavljuje kvar</param>
 public Maintenance(MaintenanceRequest maintenanceRequest, Urgency urgency, RepairService serviceType, Building building)
 {
     this.maintenanceRequest = maintenanceRequest;
     this.building = building;
     this.urgency = urgency;
     this.serviceType = serviceType;
     statusOfMaintenance = StatusOfMaintenance.NotStarted;
     maintenanceRemarks = new List<MaintenanceRemark>();
 }
        public void Can_Add_Services_To_Contractor()
        {
            // Arrange
            LegalPerson legalPerson = new LegalPerson("12345678901", "Mile d.o.o.");

            RepairService repairService1 = new RepairService("Ličenje");
            RepairService repairService2 = new RepairService("vodovodne cijevi");
            RepairService[] repairServices = new RepairService[] {
                repairService1,
                repairService2
            };

            // Act
            Contractor contractor = new Contractor(legalPerson, repairServices);
            RepairService repairService3 = new RepairService("parketi");
            contractor.AddRepairService(repairService3);

            // Assert
            Assert.AreEqual(3, contractor.RepairServices.Count);
            Assert.AreEqual(repairService1, contractor.RepairServices.ElementAt(0));
            Assert.AreEqual(repairService2, contractor.RepairServices.ElementAt(1));
            Assert.AreEqual(repairService3, contractor.RepairServices.ElementAt(2));
        }
        public void Can_Get_RepairServices_From_DB()
        {
            // Arrange
            RepairService repairService = new RepairService("Popravak vode");

            RepairServicesNHRepository repairServicesNhRepository = new RepairServicesNHRepository(SessionFactory);

            // Act
            IList<RepairService> repairServicesFromDb = null;
            using (var session = SessionFactory.OpenSession()) {
                using (var tx = session.BeginTransaction()) {
                    session.Save(repairService);
                    tx.Commit();
                }

                using (var tx = session.BeginTransaction()) {
                    repairServicesFromDb = repairServicesNhRepository.GetAll().ToList();
                    tx.Commit();
                }
            }

            // Assert
            Assert.IsTrue(repairServicesFromDb.Count == 1, "No RepairService from database.");
        }
        public void Person_Can_Issue_Maitenance_Request()
        {
            // Arrange
            MaintenanceRequest maintenanceRequest = new MaintenanceRequest(person, "Kvar", "Ne radi grijanje.", "Stan Mile, prvi kat.");

            RepairService serviceTypeForMock = new RepairService("Popravci grijanja i toplana");
            Mock<IRepairServicesRepository> repairServicesRepositoryMock = new Mock<IRepairServicesRepository>();
            repairServicesRepositoryMock.Setup(x => x.GetById(23)).Returns(serviceTypeForMock);

            RepairService serviceType = repairServicesRepositoryMock.Object.GetById(23);

            // Act
            Maintenance maintenance = new Maintenance(maintenanceRequest, Urgency.High, serviceType, building);

            // Assert
            Assert.AreEqual(maintenanceRequest, maintenance.MaintenanceRequest);
            Assert.AreEqual(StatusOfMaintenance.NotStarted, maintenance.StatusOfMaintenance);
            Assert.IsNotNull(maintenance.Urgency, "Hitnost nije definirana.");
            Assert.AreEqual(Urgency.High, maintenance.Urgency);
            Assert.IsNotNull(maintenance.ServiceType, "Usluga popravka nije definirana.");
            Assert.AreEqual(serviceType, maintenance.ServiceType);
        }
 /// <summary>
 /// Dodaje uslugu koje obavlja izvodac radova
 /// </summary>
 /// <param name="repairService"></param>
 public virtual Contractor AddRepairService(RepairService repairService)
 {
     repairServices.Add(repairService);
     return this;
 }
 /// <summary>
 /// Brise uslugu koju obavlja izvodac radova
 /// </summary>
 /// <param name="repairService"></param>
 /// <returns></returns>
 public virtual bool RemoveRepairService(RepairService repairService)
 {
     return repairServices.Remove(repairService);
 }
 /// <summary>
 /// Mijenja vrstu usluge
 /// </summary>
 /// <param name="serviceType">nova vrsta usluge</param>
 public virtual void ChangeServiceType(RepairService serviceType)
 {
     this.serviceType = serviceType;
 }