public void TestAddAsync_SurveyIdIsNull_Throws()
        {
            var target = new NfieldSurveyInvitationTemplatesService();

            Assert.Throws <ArgumentNullException>(() =>
                                                  UnwrapAggregateException(target.AddAsync(null, null)));
        }
        public void TestGetAsync_SurveyIdIsEmpty_Throws()
        {
            var target = new NfieldSurveyInvitationTemplatesService();

            Assert.Throws <ArgumentException>(() =>
                                              UnwrapAggregateException(target.GetAsync("  ")));
        }
        public void TestGetAsync_SurveyHasInvitationTemplates_ReturnsInvitationTemplates()
        {
            const string surveyId = "TestSurveyId";

            var expected1 = new InvitationTemplateModel()
            {
                Id             = 1,
                InvitationType = 1,
                Name           = "TestTemplate1",
                Subject        = "TestSubject1",
                Body           = "TestBody1"
            };

            var expected2 = new InvitationTemplateModel()
            {
                Id             = 2,
                InvitationType = 2,
                Name           = "TestTemplate2",
                Subject        = "TestSubject2",
                Body           = "TestBody2"
            };

            var target       = new NfieldSurveyInvitationTemplatesService();
            var returnObject = new[] { expected1, expected2 };
            var requestUri   = new Uri(ServiceAddress, "Surveys/" + surveyId + "/InvitationTemplates/");
            var mockClient   = InitMockClientGet <IEnumerable <InvitationTemplateModel> >(requestUri, returnObject);

            target.InitializeNfieldConnection(mockClient);
            var actualResults = target.GetAsync(surveyId).Result.ToArray();

            Assert.Equal(expected1, actualResults[0], new InvitationTemplateComparer());
            Assert.Equal(expected2, actualResults[1], new InvitationTemplateComparer());
        }
        public void TestUpdateAsync_InvitationTemplateIsNull_Throws()
        {
            var target = new NfieldSurveyInvitationTemplatesService();

            Assert.Throws <ArgumentNullException>(() =>
                                                  UnwrapAggregateException(target.UpdateAsync("a survey", null)));
        }
        public void TestUpdateAsync_SurveyIdIsWhitespace_Throws()
        {
            var target = new NfieldSurveyInvitationTemplatesService();

            Assert.Throws <ArgumentException>(() =>
                                              UnwrapAggregateException(target.UpdateAsync("  ", null)));
        }
        public void TestRemoveAsync_InvitationTemplateIsRemoved_ReturnsTrue()
        {
            const string surveyId   = "TestSurveyId";
            const int    templateId = 42;

            var mockedNfieldConnection = new Mock <INfieldConnectionClient>();
            var mockedHttpClient       = CreateHttpClientMock(mockedNfieldConnection);
            var content = new StringContent(JsonConvert.SerializeObject(new { IsSuccess = true }));

            mockedHttpClient
            .Setup(client => client.DeleteAsync(new Uri(ServiceAddress, "Surveys/" + surveyId + "/InvitationTemplates/" + templateId)))
            .Returns(CreateTask(HttpStatusCode.OK, content));

            var target = new NfieldSurveyInvitationTemplatesService();

            target.InitializeNfieldConnection(mockedNfieldConnection.Object);

            var actual = target.RemoveAsync(surveyId, templateId).Result;

            Assert.Equal(true, actual);
        }
        public void TestUpdateAsync_InvitationTemplateIsUpdated_ReturnsInvitationTemplate()
        {
            const string surveyId   = "TestSurveyId";
            const int    templateId = 42;

            var invitationTemplate = new InvitationTemplateModel
            {
                Id             = templateId,
                InvitationType = 1,
                Body           = "TestBody1"
            };
            var expected = new InvitationTemplateModel
            {
                Id             = templateId,
                InvitationType = invitationTemplate.InvitationType,
                Name           = "a Name",
                Subject        = "a Subject",
                Body           = invitationTemplate.Body
            };

            var mockedNfieldConnection = new Mock <INfieldConnectionClient>();
            var mockedHttpClient       = CreateHttpClientMock(mockedNfieldConnection);
            var content = new StringContent(JsonConvert.SerializeObject(expected));

            mockedHttpClient
            .Setup(client => client.PutAsJsonAsync(new Uri(ServiceAddress, "Surveys/" + surveyId + "/InvitationTemplates/" + templateId), It.Is <InvitationTemplateModel>(t => VerifyInvitationTemplate(t, invitationTemplate))))
            .Returns(CreateTask(HttpStatusCode.OK, content));

            var target = new NfieldSurveyInvitationTemplatesService();

            target.InitializeNfieldConnection(mockedNfieldConnection.Object);

            var actual = target.UpdateAsync(surveyId, invitationTemplate).Result;

            Assert.Equal(expected, actual, new InvitationTemplateComparer());
        }
        public void TestAddAsync_InvitationTemplateIsAdded_ReturnsInvitationTemplate()
        {
            const string surveyId = "TestSurveyId";

            var invitationTemplate = new InvitationTemplateModel
            {
                InvitationType = 1,
                Name           = "TestTemplate1",
                Subject        = "TestSubject1",
                Body           = "TestBody1"
            };
            var expected = new InvitationTemplateModel
            {
                Id             = 999,
                InvitationType = invitationTemplate.InvitationType,
                Name           = invitationTemplate.Name,
                Subject        = invitationTemplate.Subject,
                Body           = invitationTemplate.Body
            };

            var mockedNfieldConnection = new Mock <INfieldConnectionClient>();
            var mockedHttpClient       = CreateHttpClientMock(mockedNfieldConnection);
            var content = new StringContent(JsonConvert.SerializeObject(expected));

            mockedHttpClient
            .Setup(client => client.PostAsJsonAsync(new Uri(ServiceAddress, "Surveys/" + surveyId + "/InvitationTemplates/"), invitationTemplate))
            .Returns(CreateTask(HttpStatusCode.OK, content));

            var target = new NfieldSurveyInvitationTemplatesService();

            target.InitializeNfieldConnection(mockedNfieldConnection.Object);

            var actual = target.AddAsync(surveyId, invitationTemplate).Result;

            Assert.Equal(expected, actual, new InvitationTemplateComparer());
        }