/// <summary>Initializes a new instance of the <see cref="ShiftsService" /> class.</summary>
 /// <param name="configuration">The shifts rules configuration.</param>
 /// <param name="shiftsRepository">The sifts persisting repository</param>
 /// <param name="eventsEmitterService"></param>
 /// <param name="logger">The logger.</param>
 /// <exception cref="ArgumentNullException"></exception>
 public ShiftsService(IOptions <ShiftRulesConfiguration> configuration,
                      IShiftsRepository shiftsRepository,
                      IShiftEventsEmitterService eventsEmitterService,
                      ILogger <ShiftsService> logger)
 {
     _configuration        = configuration?.Value ?? throw new ArgumentNullException(nameof(configuration));
     _logger               = logger ?? throw new ArgumentNullException(nameof(logger));
     _shiftsRepository     = shiftsRepository ?? throw new ArgumentNullException(nameof(shiftsRepository));
     _eventsEmitterService = eventsEmitterService ?? throw new ArgumentNullException(nameof(eventsEmitterService));
 }
        public void Setup()
        {
            _workerTimeZone      = TimeZoneInfo.Local;
            _workerOneIdentifier = Guid.Parse(@"af1ae2f1-91ac-483f-aefd-7945bf5655ba");

            var rules = new ShiftRulesConfiguration
            {
                MinShiftLength  = 8,  // hours
                MaxShiftLength  = 8,  // hours
                MinShiftsGape   = 16, // hours
                AllowDayOverlap = true
            };

            _defaultConfig = Options.Create(rules);

            // important - need new, empty repository for each test!
            _repositoryLoggerMock = new Mock <ILogger <InMemoryShiftsRepository> >();
            _eventsEmitter        = new Mock <IShiftEventsEmitterService>();
            _serviceLoggerMock    = new Mock <ILogger <ShiftsService> >();

            _repository   = new InMemoryShiftsRepository(_repositoryLoggerMock.Object);
            _shiftService = new ShiftsService(_defaultConfig, _repository, _eventsEmitter.Object, _serviceLoggerMock.Object);
        }