add support for organization web hooks (#1884)

This commit is contained in:
Martin Alex Philip Dawson
2020-06-07 20:53:20 +01:00
committed by GitHub
parent 62c0b1fe08
commit 8d3e7b3c2c
23 changed files with 1726 additions and 16 deletions
@@ -0,0 +1,157 @@
using System.Collections.Generic;
using Xunit;
namespace Octokit.Tests.Models
{
public class NewOrganizationWebHookTests
{
public class TheCtor
{
[Fact]
public void UsesDefaultValuesForDefaultConfig()
{
var create = new NewOrganizationWebHook("windowsazure", new Dictionary<string, string>(), "http://test.com/example");
Assert.Equal(create.Url, "http://test.com/example");
Assert.Equal(create.ContentType, OrgWebHookContentType.Form);
Assert.Empty(create.Secret);
Assert.False(create.InsecureSsl);
var request = create.ToRequest();
Assert.Equal(request.Config.Count, 4);
Assert.True(request.Config.ContainsKey("url"));
Assert.True(request.Config.ContainsKey("content_type"));
Assert.True(request.Config.ContainsKey("secret"));
Assert.True(request.Config.ContainsKey("insecure_ssl"));
Assert.Equal(request.Config["url"], "http://test.com/example");
Assert.Equal(request.Config["content_type"], OrgWebHookContentType.Form.ToParameter());
Assert.Equal(request.Config["secret"], "");
Assert.Equal(request.Config["insecure_ssl"], "False");
}
[Fact]
public void CombinesUserSpecifiedContentTypeWithConfig()
{
var config = new Dictionary<string, string>
{
{"hostname", "http://hostname.url"},
{"username", "username"},
{"password", "password"}
};
var create = new NewOrganizationWebHook("windowsazure", config, "http://test.com/example")
{
ContentType = OrgWebHookContentType.Json,
Secret = string.Empty,
InsecureSsl = true
};
Assert.Equal(create.Url, "http://test.com/example");
Assert.Equal(create.ContentType, OrgWebHookContentType.Json);
Assert.Empty(create.Secret);
Assert.True(create.InsecureSsl);
var request = create.ToRequest();
Assert.Equal(request.Config.Count, 7);
Assert.True(request.Config.ContainsKey("url"));
Assert.True(request.Config.ContainsKey("content_type"));
Assert.True(request.Config.ContainsKey("secret"));
Assert.True(request.Config.ContainsKey("insecure_ssl"));
Assert.Equal(request.Config["url"], "http://test.com/example");
Assert.Equal(request.Config["content_type"], OrgWebHookContentType.Json.ToParameter());
Assert.Equal(request.Config["secret"], "");
Assert.Equal(request.Config["insecure_ssl"], true.ToString());
Assert.True(request.Config.ContainsKey("hostname"));
Assert.Equal(request.Config["hostname"], config["hostname"]);
Assert.True(request.Config.ContainsKey("username"));
Assert.Equal(request.Config["username"], config["username"]);
Assert.True(request.Config.ContainsKey("password"));
Assert.Equal(request.Config["password"], config["password"]);
}
[Fact]
public void CanSetHookEvents()
{
var create = new NewOrganizationWebHook("web", new Dictionary<string, string>(), "http://test.com/example")
{
Events = new List<string> { "*" }
};
var request = create.ToRequest();
Assert.Contains("*", request.Events);
}
[Fact]
public void EnsureCanCallToRequestMultipleTimes()
{
var create = new NewOrganizationWebHook("web", new Dictionary<string, string>(), "http://test.com/example")
{
Events = new List<string> { "*" }
};
var request = create.ToRequest();
var requestRepeated = create.ToRequest();
Assert.Contains("*", request.Events);
Assert.Contains("*", requestRepeated.Events);
}
[Fact]
public void ShouldNotContainDuplicateConfigEntriesOnSubsequentRequests()
{
var create = new NewOrganizationWebHook("web", new Dictionary<string, string>(), "http://test.com/example");
var request = create.ToRequest();
var requestRepeated = create.ToRequest();
Assert.Equal(request.Config.Count, 4);
Assert.Equal(requestRepeated.Config.Count, 4);
}
[Fact]
public void ShouldNotContainDuplicateConfigEntriesOnSubsequentRequestsWithCustomisedConfig()
{
var config = new Dictionary<string, string>
{
{"url", "http://example.com/test"},
{"hostname", "http://hostname.url"},
{"username", "username"},
{"password", "password"}
};
var create = new NewOrganizationWebHook("web", config, "http://test.com/example");
var request = create.ToRequest();
var requestRepeated = create.ToRequest();
//This is not 8, because `url` used in config, is already part of the base config
Assert.Equal(request.Config.Count, 7);
Assert.Equal(requestRepeated.Config.Count, 7);
}
[Fact]
public void PropertiesShouldTakePrecedenceOverConfigPassedIn()
{
var config = new Dictionary<string, string>
{
{"url", "http://originalurl.com/test"},
};
var create = new NewOrganizationWebHook("web", config, "http://test.com/example");
var request = create.ToRequest();
Assert.Equal(request.Config["url"], "http://test.com/example");
var subsequentRequest = create.ToRequest();
Assert.Equal(subsequentRequest.Config["url"], "http://test.com/example");
}
}
}
}