public void EndToEnd_BothViews_DataIsStoredRetrievedApprovedAndSaved()
        {
            const string firstName       = "John";
            const string lastName        = "Smith";
            const string gymMembershipId = "ABCD1234";
            var          member          = new Member {
                FirstName = firstName, LastName = lastName, GymMembershipId = gymMembershipId
            };

            var sutPage1  = new GatherMemberInfoPresenter(_tempDataRepository, _gatherMemberInfoView);
            var fakeView1 = (FakeGatherMemberInfoView)_gatherMemberInfoView;

            fakeView1.TriggerEvent_GatherMemberInfo(member);

            Assert.IsTrue(fakeView1.GoToNextViewMethodIsCalled);

            var sutPage2 = new RenewMembershipPresenter(_tempDataRepository, _nationalFitnessGateway,
                                                        _ccProcessingGateway, _memberRepository, _renewMembershipView);
            var fakeView2 = (FakeRenewMembershipView)_renewMembershipView;

            fakeView2.TriggerEvent_Initialize();
            Assert.AreEqual(member, _renewMembershipView.Member);

            fakeView2.TriggerEvent_RenewMembership();

            const bool isPaid = true;
            var        expectedFinalMessage = ApplicationConstants.FormatApprovalMessageForMember(member, isPaid);

            Assert.AreEqual(member, _renewMembershipView.Member);
            Assert.AreEqual(expectedFinalMessage, fakeView2.Message);
        }
        public void InitializeEvent_NoInput_RepopulatesViewFromTempRepository()
        {
            // define out expectations (of how the Presenter will coordinate the interfaces
            _renewMembershipView.Initialize += null;
            var initializeEvent = LastCall.IgnoreArguments().GetEventRaiser();

            _renewMembershipView.RenewMembership += null;
            LastCall.IgnoreArguments();

            const string firstName       = "Sally";
            const string lastName        = "Wong";
            const string gymMembershipId = "AB1234";
            var          member          = new Member {
                FirstName = firstName, LastName = lastName, GymMembershipId = gymMembershipId
            };

            Expect.Call(_tempDataRepository.GetMemberValues()).Return(member);

            // the retrieved member information from the _tempDataRepository
            // is now assigned to the view (where it's properties can be assigned to various controls)
            _renewMembershipView.Member = member;

            _mockRepository.ReplayAll();

            var sut = new RenewMembershipPresenter(_tempDataRepository, _nationalFitnessGateway,
                                                   _ccProcessingGateway, _memberRepository, _renewMembershipView);

            initializeEvent.Raise(_renewMembershipView, EventArgs.Empty);

            _mockRepository.VerifyAll();
        }
        public void RenewMembershipEvent_MemberInput_InstructsToGoToNextView()
        {
            // define out expectations (of how the Presenter will coordinate the interfaces
            _renewMembershipView.Initialize += null;
            LastCall.IgnoreArguments();
            _renewMembershipView.RenewMembership += null;
            var renewMembershipEvent = LastCall.IgnoreArguments().GetEventRaiser();

            const string firstName       = "Sally";
            const string lastName        = "Wong";
            const string gymMembershipId = "AB1234";
            var          member          = new Member {
                FirstName = firstName, LastName = lastName, GymMembershipId = gymMembershipId
            };

            Expect.Call(_tempDataRepository.GetMemberValues()).Return(member);

            var nationalFitnessResultsDto = new NationalFitnessResultsDTO {
                IsVerified = true
            };

            Expect.Call(_nationalFitnessGateway.VerifyMember(member)).Return(nationalFitnessResultsDto);

            const bool isPaid = true;

            Expect.Call(_ccProcessingGateway.PayDuesByMembershipId(member.GymMembershipId)).Return(isPaid);

            _memberRepository.SaveMember(member);

            _renewMembershipView.Message = ApplicationConstants.FormatApprovalMessageForMember(member, isPaid);
            _mockRepository.ReplayAll();

            var sut = new RenewMembershipPresenter(_tempDataRepository, _nationalFitnessGateway,
                                                   _ccProcessingGateway, _memberRepository, _renewMembershipView);

            renewMembershipEvent.Raise(_renewMembershipView, EventArgs.Empty);

            _mockRepository.VerifyAll();
        }