protected override void Arrange()
            {
                edfiOdsInstanceIdentificationProvider = Stub <IEdFiOdsInstanceIdentificationProvider>();
                edOrgValueMapper = Stub <IEducationOrganizationIdentifiersValueMapper>();
                educationOrganizationIdentifiersProvider = Stub <IEducationOrganizationCacheDataProvider>();

                A.CallTo(() => educationOrganizationIdentifiersProvider.GetAllEducationOrganizationIdentifiers())
                .WithAnyArguments()
                .Returns(
                    Task.Run(
                        () =>
                        (IEnumerable <EducationOrganizationIdentifiers>)
                        new EducationOrganizationIdentifiers[0]));

                // edorg value mapper
                suppliedEdOrgValueMap = new EducationOrganizationIdentifiers(
                    educationOrganizationId: 123456,
                    educationOrganizationType: "District",
                    stateEducationAgencyId: 1,
                    educationServiceCenterId: 330950,
                    localEducationAgencyId: 123456);

                A.CallTo(() => edOrgValueMapper.GetEducationOrganizationIdentifiers(default(int)))
                .WithAnyArguments()
                .Returns(suppliedEdOrgValueMap);
            }
            protected override void Arrange()
            {
                edfiOdsInstanceIdentificationProvider = Stub <IEdFiOdsInstanceIdentificationProvider>();
                edOrgValueMapper = Stub <IEducationOrganizationIdentifiersValueMapper>();
                educationOrganizationIdentifiersProvider = Stub <IEducationOrganizationCacheDataProvider>();

                A.CallTo(() => educationOrganizationIdentifiersProvider.GetAllEducationOrganizationIdentifiers())
                .WithAnyArguments()
                .Returns(
                    Task.Run(
                        () =>
                        (IEnumerable <EducationOrganizationIdentifiers>)
                        new EducationOrganizationIdentifiers[0]));

                edOrgValueMapper = Stub <IEducationOrganizationIdentifiersValueMapper>();
                A.CallTo(() => edOrgValueMapper.GetEducationOrganizationIdentifiers(default(int)))
                .WithAnyArguments()
                .Returns(EducationOrganizationIdentifiers.CreateLookupInstance(default(int)));
            }
 public void Should_call_edorg_data_provider_once_to_warm_the_cache()
 {
     A.CallTo(
         () => _educationOrganizationIdentifiersProvider.GetAllEducationOrganizationIdentifiers()).MustHaveHappened();
 }
            protected override void Arrange()
            {
                _edfiOdsInstanceIdentificationProvider = Stub <IEdFiOdsInstanceIdentificationProvider>();
                _edOrgValueMapper = Stub <IEducationOrganizationIdentifiersValueMapper>();
                _educationOrganizationIdentifiersProvider = Stub <IEducationOrganizationCacheDataProvider>();

                // edorg value mapper
                _suppliedEdOrgValueMap = new EducationOrganizationIdentifiers(
                    educationOrganizationId: 123456,
                    educationOrganizationType: "District",
                    stateEducationAgencyId: 1,
                    educationServiceCenterId: 330950,
                    localEducationAgencyId: 123456);

                A.CallTo(() => _edOrgValueMapper.GetEducationOrganizationIdentifiers(default(int)))
                .WithAnyArguments()
                .Returns(_suppliedEdOrgValueMap);

                // edorg identifiers provider
                _suppliedEducationOrganizationIdentifiers = new EducationOrganizationIdentifiers(
                    educationOrganizationId: 123456,
                    educationOrganizationType: "District",
                    stateEducationAgencyId: 1,
                    educationServiceCenterId: 330950,
                    localEducationAgencyId: 8675309);

                var memoryCacheProvider = Stub <MemoryCacheProvider>();

                var educationOrganizationCache = new EducationOrganizationCache(
                    memoryCacheProvider,
                    _edfiOdsInstanceIdentificationProvider,
                    _edOrgValueMapper,
                    _educationOrganizationIdentifiersProvider,
                    synchronousInitialization: false);

                var listLock = new object();

                for (var i = 0; i < TaskCount; i++)
                {
                    _tasks.Add(
                        new Task(
                            () =>
                    {
                        var educationOrganizationIdentifiers =
                            educationOrganizationCache.GetEducationOrganizationIdentifiers(
                                _suppliedEducationOrganizationIdentifiers.EducationOrganizationId);

                        lock (listLock)
                        {
                            _actualEducationOrganizationIdentifiers.Add(educationOrganizationIdentifiers);
                        }
                    }));
                }

                A.CallTo(() => _educationOrganizationIdentifiersProvider.GetAllEducationOrganizationIdentifiers())
                .WithAnyArguments()
                .Returns(
                    Task.Run(
                        () =>
                {
                    Task.WaitAll(_tasks.ToArray());

                    return((IEnumerable <EducationOrganizationIdentifiers>)
                           new[]
                    {
                        _suppliedEducationOrganizationIdentifiers
                    });
                }));
            }