public void GetSamplerBySampleGroupCode_STR_externalSampler()
        {
            var stCode = "00";
            var sgCode = "01";
            var freq   = 5;

            using (var db = CreateDataStore(methods: new[] { "STR" }))
            {
                db.Execute($"UPDATE SampleGroup SET SamplingFrequency = @p2, SampleSelectorType = '{CruiseMethods.CLICKER_SAMPLER_TYPE}' WHERE Code = @p1;",
                           sgCode, freq);

                var sids   = new SamplerInfoDataservice_V2(db);
                var ssRepo = new SampleSelectorRepository(sids);

                var sampler = ssRepo.GetSamplerBySampleGroupCode(stCode, sgCode);
                sampler.Should().NotBeNull();

                sampler.StratumCode.Should().Be(stCode);
                sampler.SampleGroupCode.Should().Be(sgCode);

                sampler.Should().BeAssignableTo <IFrequencyBasedSelecter>();
                ((IFrequencyBasedSelecter)sampler).Sample().Should().NotBeNull();

                var samplerAgain = ssRepo.GetSamplerBySampleGroupCode(stCode, sgCode);
                samplerAgain.Should().BeSameAs(sampler);
            }
        }
        public void UpsertSamplerState_insert()
        {
            var stCode = "00";
            var sgCode = "01";

            using (var db = CreateDataStore(methods: new[] { "STR" }))
            {
                var random = new Random();

                var sg = db.Query <SampleGroupDO>("Select * from SampleGroup;").First();

                var ds = new SamplerInfoDataservice_V2(db);

                var ss = new SamplerState()
                {
                    StratumCode        = stCode,
                    SampleGroupCode    = sgCode,
                    Counter            = random.Next(1000),
                    BlockState         = "blockStateTest1",
                    InsuranceCounter   = random.Next(1000),
                    InsuranceIndex     = random.Next(1000),
                    SampleSelectorType = "ssTypeTest1",
                    SystematicIndex    = random.Next(1000),
                };
                ds.UpsertSamplerState(ss);

                var ssAgain = ds.GetSamplerState(stCode, sgCode);
                ssAgain.Should().NotBeNull();
                ssAgain.Should().BeEquivalentTo(ss);
            }
        }
        public void GetSamplerBySampleGroupCode_STR(int freq)
        {
            var stCode = "00";
            var sgCode = "01";
            var iFreq  = 2;

            using (var db = CreateDataStore(methods: new[] { "STR" }))
            {
                db.Execute($"UPDATE SampleGroup SET SamplingFrequency = @p2, InsuranceFrequency = @p3 WHERE Code = @p1;",
                           sgCode, freq, iFreq);

                var sids   = new SamplerInfoDataservice_V2(db);
                var ssRepo = new SampleSelectorRepository(sids);

                var sampler = ssRepo.GetSamplerBySampleGroupCode(stCode, sgCode);
                sampler.Should().NotBeNull();

                sampler.StratumCode.Should().Be(stCode);
                sampler.SampleGroupCode.Should().Be(sgCode);

                sampler.Should().BeAssignableTo <IFrequencyBasedSelecter>();
                //sampler.Should().BeOfType<BlockSelecter>();
                ((IFrequencyBasedSelecter)sampler).Sample().Should().NotBeNull();

                var samplerAgain = ssRepo.GetSamplerBySampleGroupCode(stCode, sgCode);
                samplerAgain.Should().BeSameAs(sampler);
            }
        }
        public void GetSamplerBySampleGroupCode_F3P_P3P(string method)
        {
            var stCode = "00";
            var sgCode = "01";
            var kz     = 101;

            using (var db = CreateDataStore(methods: new[] { method }))
            {
                db.Execute($"UPDATE SampleGroup SET KZ = @p2 WHERE Code = @p1;",
                           sgCode, kz);

                var sids   = new SamplerInfoDataservice_V2(db);
                var ssRepo = new SampleSelectorRepository(sids);

                var sampler = ssRepo.GetSamplerBySampleGroupCode(stCode, sgCode);
                sampler.Should().NotBeNull();

                sampler.StratumCode.Should().Be(stCode);
                sampler.SampleGroupCode.Should().Be(sgCode);

                sampler.Should().BeAssignableTo <IThreePSelector>();
                ((IThreePSelector)sampler).Sample(50).Should().NotBeNull();

                var samplerAgain = ssRepo.GetSamplerBySampleGroupCode(stCode, sgCode);
                samplerAgain.Should().BeSameAs(sampler);
            }
        }
 public void GetSamplerState_returnsNullWhenNoState()
 {
     using (var db = CreateDataStore(methods: new[] { "STR" }))
     {
         var ds = new SamplerInfoDataservice_V2(db);
         var ss = ds.GetSamplerState("00", "01");
         ss.Should().BeNull();
     }
 }
        public void SaveSamplerStates(string method)
        {
            var freq   = 5;
            var stCode = "00";
            var sgCode = "01";
            var iFreq  = 2;

            using (var db = CreateDataStore(methods: new[] { "STR" }))
            {
                db.Execute($"UPDATE SampleGroup SET SamplingFrequency = @p2, InsuranceFrequency = @p3 WHERE Code = @p1;",
                           sgCode, freq, iFreq);

                var sids   = new SamplerInfoDataservice_V2(db);
                var ssRepo = new SampleSelectorRepository(sids);

                var sampler = ssRepo.GetSamplerBySampleGroupCode(stCode, sgCode);
                sampler.Should().NotBeNull();

                if (sampler is IFrequencyBasedSelecter fbs)
                {
                    fbs.Sample();
                }
                else if (sampler is IThreePSelector tps)
                {
                    tps.Sample(10);
                }
                else
                {
                    throw new Exception("unexpected sampler type");
                }

                var samplerAgain = ssRepo.GetSamplerBySampleGroupCode(stCode, sgCode);
                samplerAgain.Should().BeSameAs(sampler);

                // save sampler states and repopulate them
                ssRepo.SaveSamplerStates();

                // repopulate samplers using a new repo
                var ssRepo2       = new SampleSelectorRepository(sids);
                var samplerAgian2 = ssRepo2.GetSamplerBySampleGroupCode(stCode, sgCode);
                samplerAgian2.Should().BeEquivalentTo(sampler);

                // make sure it works
                if (samplerAgian2 is IFrequencyBasedSelecter fbs2)
                {
                    fbs2.Sample();
                }
                else if (sampler is IThreePSelector tps)
                {
                    tps.Sample(10);
                }
                else
                {
                    throw new Exception("unexpected sampler type");
                }
            }
        }
        public void GetSamplerState()
        {
            using (var db = CreateDataStore(methods: new[] { "STR" }))
            {
                var sg = db.Query <SampleGroupDO>("Select * from SampleGroup;").First();
                db.Execute2("INSERT INTO SamplerState (SampleGroup_CN) values (@SampleGroup_CN)", sg);

                var ds = new SamplerInfoDataservice_V2(db);
                var ss = ds.GetSamplerState("00", "01");
                ss.Should().NotBeNull();
            }
        }
        public void GetSamplerInfo()
        {
            using (var db = CreateDataStore(methods: new[] { "STR" }))
            {
                var strata = db.Query <StratumDO>("select * from Stratum;").ToArray();
                var sgs    = db.Query <SampleGroupDO>("Select * from samplegroup;").ToArray();

                var ds = new SamplerInfoDataservice_V2(db);
                var si = ds.GetSamplerInfo("00", "01");
                si.Should().NotBeNull();
            }
        }
        public void GetSamplerBySampleGroupCode_FCM_PCM(string method)
        {
            var stCode = "00";
            var sgCode = "01";

            using (var db = CreateDataStore(methods: new[] { method }))
            {
                var sids   = new SamplerInfoDataservice_V2(db);
                var ssRepo = new SampleSelectorRepository(sids);

                var sampler = ssRepo.GetSamplerBySampleGroupCode(stCode, sgCode);
                sampler.Should().NotBeNull();

                sampler.StratumCode.Should().Be(stCode);
                sampler.SampleGroupCode.Should().Be(sgCode);

                sampler.Should().BeAssignableTo <IFrequencyBasedSelecter>();
                ((IFrequencyBasedSelecter)sampler).Sample().Should().NotBeNull();

                var samplerAgain = ssRepo.GetSamplerBySampleGroupCode(stCode, sgCode);
                samplerAgain.Should().BeSameAs(sampler);
            }
        }