public async Task CloudflareApi_CreateDNSRecord_ThrowsAnApiExceptionForTheFirstReturnedError() { // Given var zoneId = "123"; var apiToken = "456"; _mockHttp .Expect($"{CloudflareApi.ENDPOINT}/zones/{zoneId}/dns_records") .WithHeaders(new Dictionary <string, string> { { "Authorization", $"Bearer {apiToken}" }, }) .WithJsonContent(new { type = "A", name = "yolo.example.com", content = "198.51.100.4", ttl = 120, }) .RespondWithJson(HttpStatusCode.BadRequest, new { success = false, errors = new[] { new { code = 123, message = "Record already exists!" } }, messages = Array.Empty <string>(), }); // When var client = _mockHttp.ToHttpClient(); var cloudflare = new CloudflareApi(client, new CloudflareApiOptions(apiToken)); var exception = await Assert.ThrowsAsync <ApiException>(() => cloudflare.CreateDNSRecord(zoneId, "A", "yolo.example.com", "198.51.100.4", 120) ); // Then Assert.Equal(123, exception.Code); Assert.Equal("Record already exists!", exception.Message); Assert.Equal(HttpStatusCode.BadRequest, exception.StatusCode); _mockHttp.VerifyNoOutstandingRequest(); }
public async Task CloudflareApi_CreateDNSRecord_CreatesARecordThatsProxied() { // Given var zoneId = "123"; var apiToken = "456"; var recordOne = new { id = "372e67954025e0ba6aaa6d586b9e0b59", type = "A", name = "yolo.example.com", content = "198.51.100.4", proxiable = true, proxied = true, ttl = 120, locked = false, zone_id = "123", zone_name = "example.com", created_on = "2014-01-01T05:20:00.12345Z", modified_on = "2014-01-01T05:20:00.12345Z", }; _mockHttp .Expect($"{CloudflareApi.ENDPOINT}/zones/{zoneId}/dns_records") .WithHeaders(new Dictionary <string, string> { { "Authorization", $"Bearer {apiToken}" }, }) .WithJsonContent(new { type = "A", name = "yolo.example.com", content = "198.51.100.4", proxied = true, }) .RespondWithJson(new { success = true, errors = Array.Empty <object>(), messages = Array.Empty <string>(), result = recordOne, }); // When var client = _mockHttp.ToHttpClient(); var cloudflare = new CloudflareApi(client, new CloudflareApiOptions(apiToken)); var result = await cloudflare.CreateDNSRecord( zoneId, type : "A", name : "yolo.example.com", content : "198.51.100.4", proxied : true ); // Then result.Should().BeEquivalentTo(new DnsResult { Id = recordOne.id, Type = recordOne.type, Name = recordOne.name, Content = recordOne.content, Proxiable = recordOne.proxiable, Proxied = recordOne.proxied, Ttl = recordOne.ttl, Locked = recordOne.locked, ZoneId = recordOne.zone_id, ZoneName = recordOne.zone_name, CreatedOn = DateTimeOffset.Parse(recordOne.created_on), ModifiedOn = DateTimeOffset.Parse(recordOne.modified_on), }); _mockHttp.VerifyNoOutstandingRequest(); }