public OdsInstancesController(IMapper mapper
                               , RegisterOdsInstanceCommand registerOdsInstanceCommand
                               , DeregisterOdsInstanceCommand deregisterOdsInstanceCommand
                               , IGetOdsInstanceRegistrationsByUserIdQuery getOdsInstanceRegistrationsByUserIdQuery
                               , IGetOdsInstanceRegistrationsQuery getOdsInstanceRegistrationsQuery
                               , AdminAppUserContext userContext)
 {
     _mapper = mapper;
     _registerOdsInstanceCommand               = registerOdsInstanceCommand;
     _deregisterOdsInstanceCommand             = deregisterOdsInstanceCommand;
     _getOdsInstanceRegistrationsByUserIdQuery = getOdsInstanceRegistrationsByUserIdQuery;
     _getOdsInstanceRegistrationsQuery         = getOdsInstanceRegistrationsQuery;
     _userContext = userContext;
 }
 public OdsInstancesController(
     RegisterOdsInstanceCommand registerOdsInstanceCommand
     , DeregisterOdsInstanceCommand deregisterOdsInstanceCommand
     , IGetOdsInstanceRegistrationsByUserIdQuery getOdsInstanceRegistrationsByUserIdQuery
     , IGetOdsInstanceRegistrationsQuery getOdsInstanceRegistrationsQuery
     , AdminAppUserContext userContext
     , BulkRegisterOdsInstancesCommand bulkRegisterOdsInstancesCommand
     , GetCurrentSchoolYearQuery getCurrentSchoolYear)
 {
     _registerOdsInstanceCommand               = registerOdsInstanceCommand;
     _deregisterOdsInstanceCommand             = deregisterOdsInstanceCommand;
     _getOdsInstanceRegistrationsByUserIdQuery = getOdsInstanceRegistrationsByUserIdQuery;
     _getOdsInstanceRegistrationsQuery         = getOdsInstanceRegistrationsQuery;
     _userContext = userContext;
     _bulkRegisterOdsInstancesCommand = bulkRegisterOdsInstancesCommand;
     _getCurrentSchoolYear            = getCurrentSchoolYear;
 }
        public void ShouldDeregisterOdsInstance()
        {
            var users     = SetupUsers(2).ToList();
            var testUser1 = users[0];
            var testUser2 = users[1];

            var testInstances = SetupOdsInstanceRegistrations(2).OrderBy(x => x.Name).ToList();
            var testInstanceToBeDeregistered    = testInstances[0];
            var testInstanceNotToBeDeregistered = testInstances[1];

            MockInstanceRegistrationSetup(testInstances);

            using (var database = new SqlServerUsersContext())
            {
                database.OdsInstances.Count().ShouldBe(2);
                database.Applications.Count().ShouldBe(2);
                database.Clients.Count().ShouldBe(2);
                database.ApplicationEducationOrganizations.Count().ShouldBe(2);
                database.ClientAccessTokens.Count().ShouldBe(2);
            }

            ShouldNotBeNull <SecretConfiguration>(x => x.OdsInstanceRegistrationId == testInstanceToBeDeregistered.Id);
            ShouldNotBeNull <SecretConfiguration>(x => x.OdsInstanceRegistrationId == testInstanceNotToBeDeregistered.Id);

            SetupUserWithOdsInstanceRegistrations(testUser1.Id, testInstances);
            SetupUserWithOdsInstanceRegistrations(testUser2.Id, testInstances);

            var queryInstances = new GetOdsInstanceRegistrationsByUserIdQuery(SetupContext);

            queryInstances.Execute(testUser1.Id).Count().ShouldBe(2);
            queryInstances.Execute(testUser2.Id).Count().ShouldBe(2);

            var deregisterModel = new DeregisterOdsInstanceModel
            {
                OdsInstanceId = testInstanceToBeDeregistered.Id,
                Name          = testInstanceToBeDeregistered.Name,
                Description   = testInstanceToBeDeregistered.Description
            };


            using (var sqlServerUsersContext = new SqlServerUsersContext())
            {
                var command = new DeregisterOdsInstanceCommand(SetupContext, sqlServerUsersContext);

                command.Execute(deregisterModel);
            }

            var deregisteredOdsInstance = SetupContext.OdsInstanceRegistrations.SingleOrDefault(x => x.Id == testInstanceToBeDeregistered.Id);

            deregisteredOdsInstance.ShouldBeNull();

            var notDeregisteredOdsInstance = SetupContext.OdsInstanceRegistrations.SingleOrDefault(x => x.Id == testInstanceNotToBeDeregistered.Id);

            notDeregisteredOdsInstance.ShouldNotBeNull();

            ShouldBeNull <SecretConfiguration>(x => x.OdsInstanceRegistrationId == testInstanceToBeDeregistered.Id);
            ShouldNotBeNull <SecretConfiguration>(x => x.OdsInstanceRegistrationId == testInstanceNotToBeDeregistered.Id);

            var instancesAssignedToUser1 = queryInstances.Execute(testUser1.Id).ToList();

            instancesAssignedToUser1.Count.ShouldBe(1);
            var onlyInstanceAssignedToUser1 = instancesAssignedToUser1.Single();

            onlyInstanceAssignedToUser1.Id.ShouldBe(testInstanceNotToBeDeregistered.Id);
            onlyInstanceAssignedToUser1.Name.ShouldBe(testInstanceNotToBeDeregistered.Name);
            onlyInstanceAssignedToUser1.Description.ShouldBe(testInstanceNotToBeDeregistered.Description);

            var instancesAssignedToUser2 = queryInstances.Execute(testUser2.Id).ToList();

            instancesAssignedToUser2.Count.ShouldBe(1);
            var onlyInstanceAssignedToUser2 = instancesAssignedToUser2.Single();

            onlyInstanceAssignedToUser2.Id.ShouldBe(testInstanceNotToBeDeregistered.Id);
            onlyInstanceAssignedToUser2.Name.ShouldBe(testInstanceNotToBeDeregistered.Name);
            onlyInstanceAssignedToUser2.Description.ShouldBe(testInstanceNotToBeDeregistered.Description);

            using (var database = new SqlServerUsersContext())
            {
                database.OdsInstances.Count().ShouldBe(2);
                database.Applications.Count().ShouldBe(1);
                database.Clients.Count().ShouldBe(1);
                database.ApplicationEducationOrganizations.Count().ShouldBe(1);
                database.ClientAccessTokens.Count().ShouldBe(1);
            }
        }