Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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();
        }