//----------------------------------------------------------------//

        public FeedManager(ISession session, IServiceProvider provider)
        {
            _commandFactory = provider.GetService <ICommandFactory>();
            _queryFactory   = provider.GetService <IQueryFactory>();

            _genreCommand      = _commandFactory.CreateCommand <IGenreCommand>(session);
            _companyCommand    = _commandFactory.CreateCommand <ICompanyCommand>(session);
            _countryCommand    = _commandFactory.CreateCommand <ICountryCommand>(session);
            _peopleCommad      = _commandFactory.CreateCommand <IPeopleCommand>(session);
            _movieCommand      = _commandFactory.CreateCommand <IMovieCommand>(session);
            _castCommand       = _commandFactory.CreateCommand <ICastCommand>(session);
            _crewCommand       = _commandFactory.CreateCommand <ICrewCommand>(session);
            _jobCommand        = _commandFactory.CreateCommand <IJobCommand>(session);
            _departmentCommand = _commandFactory.CreateCommand <IDepartmentCommand>(session);

            _movieGenreCommand   = _commandFactory.CreateCommand <IMovieGenreCommand>(session);
            _movieCompanyCommand = _commandFactory.CreateCommand <IMovieCompanyCommand>(session);
            _movieCountryCommand = _commandFactory.CreateCommand <IMovieCountryCommand>(session);

            _movieCountryQuery = _queryFactory.CreateQuery <IMovieCountryQuery>(session);
            _movieCompanyQuery = _queryFactory.CreateQuery <IMovieCompanyQuery>(session);
            _movieGenreQuery   = _queryFactory.CreateQuery <IMovieGenreQuery>(session);

            _movieQuery      = _queryFactory.CreateQuery <IMovieQuery>(session);
            _genreQuery      = _queryFactory.CreateQuery <IGenreQuery>(session);
            _companyQuery    = _queryFactory.CreateQuery <ICompanyQuery>(session);
            _countryQuery    = _queryFactory.CreateQuery <ICountryQuery>(session);
            _castQuery       = _queryFactory.CreateQuery <ICastQuery>(session);
            _crewQuery       = _queryFactory.CreateQuery <ICrewQuery>(session);
            _peopleQuery     = _queryFactory.CreateQuery <IPeopleQuery>(session);
            _jobQuery        = _queryFactory.CreateQuery <IJobQuery>(session);
            _departmentQuery = _queryFactory.CreateQuery <IDepartmentQuery>(session);

            _loadDataService = provider.GetRequiredService <ILoadDataService>();
        }
        public void Validate_WhenContactRepositoryIsNull_ThrowsArgumentNullException()
        {
            ICountryCommand sut = CreateSut();

            ArgumentNullException result = Assert.Throws <ArgumentNullException>(() => sut.Validate(_validatorMockContext.ValidatorMock.Object, null));

            Assert.That(result.ParamName, Is.EqualTo("contactRepository"));
        }
        public void Validate_WhenCalled_ReturnsValidator()
        {
            ICountryCommand sut = CreateSut();

            IValidator result = sut.Validate(_validatorMockContext.ValidatorMock.Object, _contactRepositoryMock.Object);

            Assert.That(result, Is.EqualTo(_validatorMockContext.ValidatorMock.Object));
        }
        public void ToDomain_WhenCalled_ReturnsCountry()
        {
            ICountryCommand sut = CreateSut();

            ICountry result = sut.ToDomain();

            Assert.That(result, Is.TypeOf <Country>());
        }
        public void ToDomain_WhenCalled_ReturnsCountryWithPhonePrefixFromCommand()
        {
            string          phonePrefix = _fixture.Create <string>();
            ICountryCommand sut         = CreateSut(phonePrefix: phonePrefix);

            ICountry result = sut.ToDomain();

            Assert.That(result.PhonePrefix, Is.EqualTo(phonePrefix));
        }
        public void ToDomain_WhenCalled_ReturnsCountryWithUniversalNameFromCommand()
        {
            string          universalName = _fixture.Create <string>();
            ICountryCommand sut           = CreateSut(universalName: universalName);

            ICountry result = sut.ToDomain();

            Assert.That(result.UniversalName, Is.EqualTo(universalName));
        }
        public void ToDomain_WhenCalled_ReturnsCountryWithCodeFromCommand()
        {
            string          countryCode = _fixture.Create <string>();
            ICountryCommand sut         = CreateSut(countryCode);

            ICountry result = sut.ToDomain();

            Assert.That(result.Code, Is.EqualTo(countryCode.ToUpper()));
        }
        public void Validate_WhenCalled_AssertShouldNotBeNullOrWhiteSpaceWasCalledOnStringValidatorForName()
        {
            string          name = _fixture.Create <string>();
            ICountryCommand sut  = CreateSut(name);

            sut.Validate(_validatorMockContext.ValidatorMock.Object, _contactRepositoryMock.Object);

            _validatorMockContext.StringValidatorMock.Verify(m => m.ShouldNotBeNullOrWhiteSpace(
                                                                 It.Is <string>(value => string.CompareOrdinal(value, name) == 0),
                                                                 It.Is <Type>(type => type == sut.GetType()),
                                                                 It.Is <string>(field => string.CompareOrdinal(field, "Name") == 0)),
                                                             Times.Once());
        }
        public void Validate_WhenCalled_AssertShouldMatchPatternWasCalledOnStringValidatorForPhonePrefix()
        {
            string          phonePrefix = _fixture.Create <string>();
            ICountryCommand sut         = CreateSut(phonePrefix: phonePrefix);

            sut.Validate(_validatorMockContext.ValidatorMock.Object, _contactRepositoryMock.Object);

            _validatorMockContext.StringValidatorMock.Verify(m => m.ShouldMatchPattern(
                                                                 It.Is <string>(value => string.CompareOrdinal(value, phonePrefix) == 0),
                                                                 It.Is <Regex>(value => value != null && string.CompareOrdinal(value.ToString(), RegexTestHelper.PhonePrefixRegexPattern) == 0),
                                                                 It.Is <Type>(type => type == sut.GetType()),
                                                                 It.Is <string>(field => string.CompareOrdinal(field, "PhonePrefix") == 0),
                                                                 It.Is <bool>(value => value == false)),
                                                             Times.Once());
        }
        public void Validate_WhenCalled_AssertShouldHaveMaxLengthWasCalledOnStringValidatorForPhonePrefix()
        {
            string          phonePrefix = _fixture.Create <string>();
            ICountryCommand sut         = CreateSut(phonePrefix: phonePrefix);

            sut.Validate(_validatorMockContext.ValidatorMock.Object, _contactRepositoryMock.Object);

            _validatorMockContext.StringValidatorMock.Verify(m => m.ShouldHaveMaxLength(
                                                                 It.Is <string>(value => string.CompareOrdinal(value, phonePrefix) == 0),
                                                                 It.Is <int>(value => value == 4),
                                                                 It.Is <Type>(type => type == sut.GetType()),
                                                                 It.Is <string>(field => string.CompareOrdinal(field, "PhonePrefix") == 0),
                                                                 It.Is <bool>(value => value == false)),
                                                             Times.Once());
        }
        public void Validate_WhenCalled_AssertShouldHaveMinLengthWasCalledOnStringValidatorForUniversalName()
        {
            string          universalName = _fixture.Create <string>();
            ICountryCommand sut           = CreateSut(universalName: universalName);

            sut.Validate(_validatorMockContext.ValidatorMock.Object, _contactRepositoryMock.Object);

            _validatorMockContext.StringValidatorMock.Verify(m => m.ShouldHaveMinLength(
                                                                 It.Is <string>(value => string.CompareOrdinal(value, universalName) == 0),
                                                                 It.Is <int>(value => value == 1),
                                                                 It.Is <Type>(type => type == sut.GetType()),
                                                                 It.Is <string>(field => string.CompareOrdinal(field, "UniversalName") == 0),
                                                                 It.Is <bool>(value => value == false)),
                                                             Times.Once());
        }