public IActionResult TaskList()
        {
            Session.SetCurrentUserIsAdmin(false);
            Session.ClearCurrentPaStatus();
            Session.ClearCurrentAbrId();
            Session.ClearCurrentDopStatus();

            var licenceId = Session.GetCurrentLicenceId();

            var model = LicenceApplicationViewModelBuilder.Build <LicenceApplicationViewModel>(licenceId);

            if (licenceId == 0)
            {
                Session.SetCurrentLicenceId(LicenceApplicationPostDataHandler.Insert(model));
            }

            //TODO: It's feasible we could access this page with no licenceId where the model will be null
            //TODO: how should we handle this
            model.Declaration?.Validate();
            model.OrganisationDetails?.Validate();
            model.PrincipalAuthority?.Validate();
            model.AlternativeBusinessRepresentatives?.Validate();
            model.DirectorOrPartner?.Validate();
            model.NamedIndividuals?.Validate();
            model.Organisation?.Validate();

            return(View(model));
        }
        public void it_should_not_create_a_new_status_if_one_is_not_present_in_the_model()
        {
            const int expectedId = 1;

            var licence = new Licence {
                Id = 1
            };

            repository.Create <Licence>().Returns(licence);
            repository.Create <Address>().Returns(new Address());
            repository.Upsert(Arg.Any <Licence>()).ReturnsForAnyArgs(1);
            repository.GetById <Licence>(expectedId).Returns(licence);

            var pdh = new LicenceApplicationPostDataHandler(mapper, repository, licenceRepository, statusRepository,
                                                            dateTimeProvider);
            var result = pdh.Insert(new LicenceApplicationViewModel());

            Assert.AreEqual(expectedId, result);
            repository.DidNotReceive().Create <LicenceStatusChange>();
            repository.DidNotReceive().Upsert(Arg.Any <LicenceStatusChange>());
        }
        public void it_should_set_a_draft_URN_for_the_new_licence()
        {
            const int    expectedId  = 1;
            const string expectedUrn = "DRAFT-0001";

            var licence = new Licence {
                Id = 1
            };

            repository.Create <Licence>().Returns(licence);
            repository.Create <Address>().Returns(new Address());
            repository.Upsert(Arg.Any <Licence>()).ReturnsForAnyArgs(1);
            repository.GetById <Licence>(expectedId).Returns(licence);

            var pdh = new LicenceApplicationPostDataHandler(mapper, repository, licenceRepository, statusRepository,
                                                            dateTimeProvider);
            var result = pdh.Insert(new LicenceApplicationViewModel());

            Assert.AreEqual(expectedId, result);
            repository.Received().Upsert(Arg.Is <Licence>(l => l.ApplicationId == expectedUrn));
        }
        public void it_should_create_new_licence_and_address_entities_and_return_the_licence_id()
        {
            const int expectedId = 1;

            var licence = new Licence {
                Id = 1
            };

            repository.Create <Licence>().Returns(licence);
            repository.Create <Address>().Returns(new Address());
            repository.Upsert(Arg.Any <Licence>()).ReturnsForAnyArgs(1);
            repository.GetById <Licence>(expectedId).Returns(licence);

            var pdh = new LicenceApplicationPostDataHandler(mapper, repository, licenceRepository, statusRepository,
                                                            dateTimeProvider);
            var result = pdh.Insert(new LicenceApplicationViewModel());

            Assert.AreEqual(expectedId, result);
            repository.Received().Create <Licence>();
            repository.Received().Create <Address>();
        }
        public void it_should_create_a_new_status_if_one_is_present_in_the_model()
        {
            var consts = new ConstantService();
            var model  = new LicenceApplicationViewModel
            {
                NewLicenceStatus = new LicenceStatusViewModel
                {
                    Id = consts.NewApplicationStatusId
                }
            };

            const int expectedId = 1;

            var licence = new Licence {
                Id = 1
            };
            var status = new LicenceStatus
            {
                Id = 100
            };

            repository.Create <Licence>().Returns(licence);
            repository.Create <Address>().Returns(new Address());
            repository.Create <LicenceStatusChange>().Returns(new LicenceStatusChange());
            repository.Upsert(Arg.Any <Licence>()).ReturnsForAnyArgs(1);
            repository.GetById <Licence>(expectedId).Returns(licence);
            repository.GetById <LicenceStatus>(100).Returns(status);

            dateTimeProvider.Now().Returns(DateTime.MinValue);

            var pdh = new LicenceApplicationPostDataHandler(mapper, repository, licenceRepository, statusRepository,
                                                            dateTimeProvider);
            var result = pdh.Insert(model);

            Assert.AreEqual(expectedId, result);
            repository.Received(1).Upsert(Arg.Is <LicenceStatusChange>(c => c.Status.Id == consts.NewApplicationStatusId && c.DateCreated == DateTime.MinValue));
        }