public async Task Handler_ShouldReturnCorrectTagDetails_AfterPreservationStarted()
        {
            Tag tag;

            using (var context = new PreservationContext(_dbContextOptions, _plantProvider, _eventDispatcher, _currentUserProvider))
            {
                tag = context.Tags.Include(t => t.Requirements).Single(t => t.Id == _testTagId);
                tag.StartPreservation();
                context.SaveChangesAsync().Wait();
            }

            using (var context = new PreservationContext(_dbContextOptions, _plantProvider, _eventDispatcher, _currentUserProvider))
            {
                _timeProvider.ElapseWeeks(_testDataSet.IntervalWeeks);

                var query = new GetTagDetailsQuery(_testTagId);
                var dut   = new GetTagDetailsQueryHandler(context);

                var result = await dut.Handle(query, default);

                Assert.IsNotNull(result);
                Assert.AreEqual(ResultType.Ok, result.ResultType);

                var dto     = result.Data;
                var step    = context.Steps.Single(s => s.Id == tag.StepId);
                var mode    = context.Modes.Single(m => m.Id == step.ModeId);
                var resp    = context.Responsibles.Single(r => r.Id == step.ResponsibleId);
                var journey = context.Journeys.Single(j => j.Steps.Any(s => s.Id == step.Id));
                Assert.IsTrue(dto.IsInUse);
                Assert.AreEqual(tag.AreaCode, dto.AreaCode);
                Assert.AreEqual(tag.DisciplineCode, dto.DisciplineCode);
                Assert.AreEqual(tag.Calloff, dto.CalloffNo);
                Assert.AreEqual(tag.CommPkgNo, dto.CommPkgNo);
                Assert.AreEqual(tag.Description, dto.Description);
                Assert.AreEqual(tag.Id, dto.Id);
                Assert.AreEqual(tag.McPkgNo, dto.McPkgNo);
                Assert.AreEqual(tag.PurchaseOrderNo, dto.PurchaseOrderNo);
                Assert.AreEqual(PreservationStatus.Active.GetDisplayValue(), dto.Status);
                Assert.AreEqual(tag.TagNo, dto.TagNo);
                Assert.AreEqual(tag.TagType, dto.TagType);
                Assert.AreEqual(tag.IsReadyToBePreserved(), dto.ReadyToBePreserved);
                Assert.IsNotNull(dto.Journey.Title);
                Assert.AreEqual(journey.Title, dto.Journey.Title);
                Assert.IsNotNull(dto.Step);
                Assert.AreEqual(step.Title, dto.Step.Title);
                Assert.IsNotNull(dto.Mode);
                Assert.AreEqual(mode.Title, dto.Mode.Title);
                Assert.IsNotNull(dto.Responsible);
                Assert.AreEqual(resp.Code, dto.Responsible.Code);
            }
        }
        public async Task Handler_ShouldReturnNotFound_WhenTagNotFound()
        {
            using (var context = new PreservationContext(_dbContextOptions, _plantProvider, _eventDispatcher, _currentUserProvider))
            {
                var query = new GetTagDetailsQuery(0);
                var dut   = new GetTagDetailsQueryHandler(context);

                var result = await dut.Handle(query, default);

                Assert.IsNotNull(result);
                Assert.AreEqual(ResultType.NotFound, result.ResultType);
                Assert.IsNull(result.Data);
            }
        }
        public async Task Handler_ShouldReturnIsInUseFalse_BeforePreservationStartedAndNoAttachmentsOrActions()
        {
            using (var context = new PreservationContext(_dbContextOptions, _plantProvider, _eventDispatcher, _currentUserProvider))
            {
                var query = new GetTagDetailsQuery(_testTagId);
                var dut   = new GetTagDetailsQueryHandler(context);

                var result = await dut.Handle(query, default);

                Assert.IsNotNull(result);
                Assert.AreEqual(ResultType.Ok, result.ResultType);

                var dto = result.Data;
                Assert.IsFalse(dto.IsInUse);
            }
        }
        public async Task Handler_ShouldReturnIsInUseTrue_BeforePreservationStartedButActionExists()
        {
            using (var context = new PreservationContext(_dbContextOptions, _plantProvider, _eventDispatcher, _currentUserProvider))
            {
                var tag = context.Tags.Include(t => t.Requirements).Single(t => t.Id == _testTagId);
                tag.AddAction(new Action(TestPlant, "A", "D", null));
                context.SaveChangesAsync().Wait();
            }
            using (var context = new PreservationContext(_dbContextOptions, _plantProvider, _eventDispatcher, _currentUserProvider))
            {
                var query = new GetTagDetailsQuery(_testTagId);
                var dut   = new GetTagDetailsQueryHandler(context);

                var result = await dut.Handle(query, default);

                Assert.IsNotNull(result);
                Assert.AreEqual(ResultType.Ok, result.ResultType);

                var dto = result.Data;
                Assert.IsTrue(dto.IsInUse);
            }
        }