public void GetWorkLog_returns_failure_result_if_ticket_query_returns_null(AddWorkLogRequest request,
                                                                                   [Frozen] IGetsTicketByReference ticketQuery,
                                                                                   TicketWorkLogFactory sut)
        {
            Mock.Get(ticketQuery).Setup(x => x.GetTicketByReference(It.IsAny <TicketReference>())).Returns(() => null);
            var result = sut.GetWorkLog(request);

            Assert.That(result?.Success, Is.False);
            Assert.That(result?.TicketNotFound, Is.True);
        }
        public void GetWorkLog_returns_success_result_with_correct_values_from_services(AddWorkLogRequest request,
                                                                                        [Frozen] IParsesTimespan timespanParser,
                                                                                        [Frozen] IGetsTicketByReference ticketQuery,
                                                                                        int minutes,
                                                                                        Ticket ticket,
                                                                                        TicketWorkLogFactory sut)
        {
            Mock.Get(ticketQuery).Setup(x => x.GetTicketByReference(request.TicketReference)).Returns(ticket);
            Mock.Get(timespanParser).Setup(x => x.GetTimeSpan(request.TimeSpent)).Returns(() => TimeSpan.FromMinutes(minutes));

            var result = sut.GetWorkLog(request);

            Assert.That(result?.Success, Is.True);
            Assert.That(result?.WorkLog?.User, Is.SameAs(request.User));
            Assert.That(result?.Ticket, Is.SameAs(ticket));
            Assert.That(result?.WorkLog?.Ticket, Is.Null);
            Assert.That(result?.WorkLog?.GetTimeSpent().TotalMinutes, Is.EqualTo(minutes));
            Assert.That(result?.WorkLog?.TimeStarted, Is.EqualTo(request.TimeStarted));
        }
        public void GetWorkLog_returns_failure_result_if_time_parser_throws_FormatException(AddWorkLogRequest request,
                                                                                            [Frozen] IParsesTimespan timespanParser,
                                                                                            TicketWorkLogFactory sut)
        {
            Mock.Get(timespanParser).Setup(x => x.GetTimeSpan(It.IsAny <string>())).Throws <FormatException>();
            var result = sut.GetWorkLog(request);

            Assert.That(result?.Success, Is.False);
            Assert.That(result?.TimeSpentIsInvalid, Is.True);
        }
 public void GetWorkLog_throws_ArgumentException_if_user_is_null(AddWorkLogRequest request,
                                                                 TicketWorkLogFactory sut)
 {
     request.User = null;
     Assert.That(() => sut.GetWorkLog(request), Throws.InstanceOf <ArgumentException>());
 }