public void Execute_WhenNotAllPackagesNeedsToBeResume_ShouldOnlyResumeTheOnesThatAreAtTheRightTime()
        {
            DroneActions.EditSettings<DroneSettings>(x => x.StoreHostname = DefaultHostUrl);

            var creativePackage = new List<CreativePackage>
                {
                    new CreativePackage
                        {
                            To = "*****@*****.**",
                            Group = "$default$",
                            Processed = true
                        },
                    new CreativePackage
                        {
                            To = "*****@*****.**",
                            Group = "$default$",
                            Processed = true
                        },
                };

            DroneActions.StoreCollection(creativePackage);

            DroneActions.Store(new GroupsAndIndividualDomainsSendingPolicies
                {
                    GroupSendingPolicies = new Dictionary<string, ResumeSendingPolicy>
                        {
                            {"david.com", new ResumeSendingPolicy {ResumeAt = DateTime.UtcNow + TimeSpan.FromHours(-4)}},
                            {"cookie.com", new ResumeSendingPolicy {ResumeAt = DateTime.UtcNow + TimeSpan.FromHours(2)}}
                        }
                });

            var task = new ResumeSendingForIndividualDomains();

            DroneActions.StartScheduledTask(task);
            Jobs.Drone().WaitForJobToStart(task);

            DroneActions.WaitForChangeOnStoredObject<CreativePackage>(x => x.To == "*****@*****.**", x => x.Processed == false);
            DroneActions.WaitForChangeOnStoredObject<CreativePackage>(x => x.To == "*****@*****.**", x => x.Processed);
        }
        public void Execute_WhenThereAreProcessedMailAndThereAreNoMatchesOfDomainsToBeResumed_ShouldDoNothing()
        {
            DroneActions.EditSettings<DroneSettings>(x => x.StoreHostname = DefaultHostUrl);

            var creativePackage = new List<CreativePackage>
                {
                    new CreativePackage
                        {
                            To = "*****@*****.**",
                            Group = "$default$",
                            Processed = true
                        },
                    new CreativePackage
                        {
                            To = "*****@*****.**",
                            Group = "$default$",
                            Processed = true
                        },
                };

            DroneActions.StoreCollection(creativePackage);

            DroneActions.Store(new GroupsAndIndividualDomainsSendingPolicies
                {
                    GroupSendingPolicies = new Dictionary<string, ResumeSendingPolicy>
                        {
                            {"david.com", new ResumeSendingPolicy {ResumeAt = DateTime.UtcNow + TimeSpan.FromHours(4)}},
                            {"cookie.com", new ResumeSendingPolicy {ResumeAt = DateTime.UtcNow + TimeSpan.FromHours(2)}}
                        }
                });

            var task = new ResumeSendingForIndividualDomains();

            DroneActions.StartScheduledTask(task);
            Jobs.Drone().WaitForJobToStart(task);

            Thread.Sleep(1000);

            DroneActions.WaitForChangeOnStoredObject<CreativePackage>(x => x.To == "*****@*****.**", x => x.Processed);
            DroneActions.WaitForChangeOnStoredObject<CreativePackage>(x => x.To == "*****@*****.**", x => x.Processed);
        }
        public void Execute_WhenThereAreDomainsToResume_ShouldFireAnEvent()
        {
            DroneActions.EditSettings<DroneSettings>(x => x.StoreHostname = DefaultHostUrl);

            ListenToEvent<ResumingGroups>();

            DroneActions.Store(new GroupsAndIndividualDomainsSendingPolicies
                {
                    GroupSendingPolicies = new Dictionary<string, ResumeSendingPolicy>
                        {
                            {"david.com", new ResumeSendingPolicy {ResumeAt = DateTime.UtcNow + TimeSpan.FromHours(-4)}},
                            {"cookie.com", new ResumeSendingPolicy {ResumeAt = DateTime.UtcNow + TimeSpan.FromHours(-2)}}
                        }
                });

            var task = new ResumeSendingForIndividualDomains();

            DroneActions.StartScheduledTask(task);

            AssertEventWasPublished<ResumingGroups>(x => x.Groups.Should().BeEquivalentTo(new[] { "david.com", "cookie.com" }));
        }