public void BuildDestinationUri_Builds_Correct_Destination_Uri_Query() { //arrange var incomingUriQuery = new Uri( "http://pseudohost.com:567/sessionId/aHR0cHM6Ly90bi1yZXN0LXByb2R1Y3Rpb24uY2xvdWRhcHAubmV0OjQ0My9hcGkvdjEuMC8yMDE0Lw==/students?id=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"); var incomingUriSlashB4Query = new Uri( "http://pseudohost.com:567/sessionId/aHR0cHM6Ly90bi1yZXN0LXByb2R1Y3Rpb24uY2xvdWRhcHAubmV0OjQ0My9hcGkvdjEuMC8yMDE0Lw==/students/?id=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"); var incomingUriMultiQuery = new Uri( "http://pseudohost.com:567/sessionId/aHR0cHM6Ly90bi1yZXN0LXByb2R1Y3Rpb24uY2xvdWRhcHAubmV0OjQ0My9hcGkvdjEuMC8yMDE0Lw==/students??id=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"); //encoded part for all of the above = https://tn-rest-production.cloudapp.net:443/api/v1.0/2014/ var expected = new Uri("https://tn-rest-production.cloudapp.net:443/api/v1.0/2014/students?id=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"); var config = Stub<IConfig>(); config.Stub(c => c.SessionIdSegmentIndex).IgnoreArguments().Return(1); config.Stub(c => c.DestinationUrlSegementIndex).IgnoreArguments().Return(2); var pathInspector = new ApiTransactionUtility(config); // act var actualQuery = pathInspector.BuildDestinationUri(incomingUriQuery); var actualSlashB4Query = pathInspector.BuildDestinationUri(incomingUriSlashB4Query); var actualMultiQuery = pathInspector.BuildDestinationUri(incomingUriMultiQuery); // assert Assert.AreEqual(expected, actualSlashB4Query); Assert.AreEqual(expected, actualQuery); Assert.AreEqual(expected, actualMultiQuery); }
public void BuildDestinationUri_Builds_Correct_Destination_Uri_MidSlashes() { //arrange var incomingUriTrailingSlash = new Uri( "http://pseudohost.com:567/sessionId/aHR0cHM6Ly90bi1yZXN0LXByb2R1Y3Rpb24uY2xvdWRhcHAubmV0OjQ0My9hcGkvdjEuMC8yMDE0Lw==/students/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"); //encoded part = https://tn-rest-production.cloudapp.net:443/api/v1.0/2014/ var incomingUriNoTrailingSlash = new Uri( "http://pseudohost.com:567/sessionId/aHR0cHM6Ly90bi1yZXN0LXByb2R1Y3Rpb24uY2xvdWRhcHAubmV0OjQ0My9hcGkvdjEuMC8yMDE0/students/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"); //encoded part = https://tn-rest-production.cloudapp.net:443/api/v1.0/2014 <--- note the difference in last char. A key breaking point! var expected = new Uri("https://tn-rest-production.cloudapp.net:443/api/v1.0/2014/students/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"); //the ed-fi validation API does not care if there are extra slashes between each Uri segment. //So long as we ensure there is at least 1 slash between each segment, their API can handle it properly (as of July 2014) var config = Stub<IConfig>(); config.Stub(c => c.SessionIdSegmentIndex).IgnoreArguments().Return(1); config.Stub(c => c.DestinationUrlSegementIndex).IgnoreArguments().Return(2); var pathInspector = new ApiTransactionUtility(config); // act var actualTrailingSlash = pathInspector.BuildDestinationUri(incomingUriTrailingSlash); var actualNoTrailingSlash = pathInspector.BuildDestinationUri(incomingUriNoTrailingSlash); // assert Assert.AreEqual(expected, actualTrailingSlash); Assert.AreEqual(expected, actualNoTrailingSlash); }
public void ExtractBody_Returns_Empty_String_With_Null_HttpContext() { // arrange var expected = string.Empty; var config = Stub<IConfig>(); var pathInspector = new ApiTransactionUtility(config); // act var actual = pathInspector.ExtractBody(null); //assert Assert.AreEqual(expected, actual); }
public void ExtractSessionId_Properly_Returns_UrlSegment_Index_From_Config_Value() { //arrange const string expected = "index1"; var uri = new Uri("http://www.teste.com/index0/index1/index2/index3"); var config = Stub<IConfig>(); config.Stub(c => c.SessionIdSegmentIndex).IgnoreArguments().Return(2); var pathInspector = new ApiTransactionUtility(config); // act var actual = pathInspector.ExtractSessionId(uri); // assert Assert.AreEqual(expected, actual); }
public void ExtractSessionId_Properly_Returns_Empty_String_When_Index_Less_Than_Segment_Zero() { //arrange var uri = new Uri("http://www.teste.com/index0/index1/index2/index3"); var config = Stub<IConfig>(); config.Stub(c => c.SessionIdSegmentIndex).IgnoreArguments().Return(-1); var pathInspector = new ApiTransactionUtility(config); // act var actual = pathInspector.ExtractSessionId(uri); // assert Assert.AreEqual(string.Empty, actual); }
public void GetDestination_Properly_Decodes_String() { // arrange var expected = "https://www.google.com/"; var config = Stub<IConfig>(); var pathInspector = new ApiTransactionUtility(config); // act var actual = pathInspector.DecodeDestination(EncodedUrl); // assert Assert.IsTrue(expected == actual); }
public void BuildDestinationUri_Throws_When_Not_Enough_Segments_For_Destination() { //arrange var incomingNotEnoughSegments = new Uri("http://pseudohost.com:567/sessionId/aHR0cHM6Ly90bi1yZXN0LXByb2R1Y3Rpb24uY2xvdWRhcHAubmV0OjQ0My9hcGkvdjEuMC8yMDE0Lw=="); var config = Stub<IConfig>(); config.Stub(c => c.SessionIdSegmentIndex).IgnoreArguments().Return(1); config.Stub(c => c.DestinationUrlSegementIndex).IgnoreArguments().Return(2); var pathInspector = new ApiTransactionUtility(config); // act and assert Assert.Throws<CannotParseUriException>(() => pathInspector.BuildDestinationUri(incomingNotEnoughSegments)); }
public void BuildDestinationUri_Throws_When_Decoded_Destination_Uri_Not_Valid() { //arrange var incomingNonUriEncoded = new Uri("http://pseudohost.com:567/sessionId/dG90YWxseSFub3ReYSxVcmk=/destIndex0/destIndex1?query=this"); //dG90YWxseSFub3ReYSxVcmk= decodes to "totally!not^a,Uri" var config = Stub<IConfig>(); config.Stub(c => c.SessionIdSegmentIndex).IgnoreArguments().Return(1); config.Stub(c => c.DestinationUrlSegementIndex).IgnoreArguments().Return(2); var pathInspector = new ApiTransactionUtility(config); // act and assert Assert.Throws<CannotParseUriException>(() => pathInspector.BuildDestinationUri(incomingNonUriEncoded)); }
public void ExtractSessionId_Properly_Throws_When_Index_Less_Than_Segment_Zero() { //arrange var uri = new Uri("http://www.teste.com/index0/index1/index2/index3"); var config = Stub<IConfig>(); config.Stub(c => c.SessionIdSegmentIndex).IgnoreArguments().Return(-1); var pathInspector = new ApiTransactionUtility(config); // act and assert Assert.Throws<ConfigurationErrorsException>(() => pathInspector.ExtractSessionId(uri)); }
public void ExtractDestination_Properly_Throws_When_Index_Greater_Than_Segment_Count() { //arrange var uri = new Uri("http://www.teste.com/index0/index1/index2/index3"); var config = Stub<IConfig>(); config.Stub(c => c.DestinationUrlSegementIndex).IgnoreArguments().Return(5); var pathInspector = new ApiTransactionUtility(config); // act and assert Assert.Throws<CannotParseUriException>(() => pathInspector.ExtractDestination(uri)); }
public void ExtractDestination_Properly_Returns_Decoded_UrlSegment_From_Config_Value_Index() { //arrange const string expected = DecodedUrl; var encodedUri = new Uri(string.Format("http://www.teste.com/index0/{0}/index2/index3", EncodedUrl)); var config = Stub<IConfig>(); config.Stub(c => c.DestinationUrlSegementIndex).IgnoreArguments().Return(2); var pathInspector = new ApiTransactionUtility(config); // act var actual = pathInspector.ExtractDestination(encodedUri); // assert Assert.AreEqual(expected, actual); }