Skip to content

Commit baa7721

Browse files
committed
[Feature] - Create sendername
1 parent fd7bd70 commit baa7721

6 files changed

Lines changed: 173 additions & 1 deletion

File tree

examples/sendernames/Create.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using SMSApi.Api;
2+
using smsapi.Api.Response.REST.Exception;
3+
4+
var client = new ClientOAuth("token");
5+
var features = new Features(client);
6+
7+
const string newSender = "new sender";
8+
9+
try
10+
{
11+
var createdSendername = features.Sendernames()
12+
.Create(newSender)
13+
.Execute();
14+
15+
Console.WriteLine(createdSendername.Sender);
16+
Console.WriteLine(createdSendername.Status);
17+
Console.WriteLine(createdSendername.IsDefault);
18+
Console.WriteLine(createdSendername.CreatedAt);
19+
}
20+
catch (ValidationException ex)
21+
{
22+
foreach (var validationErrorsError in ex.ValidationErrors.Errors)
23+
Console.WriteLine(validationErrorsError.Message);
24+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System.Collections.Generic;
2+
using System.Collections.Specialized;
3+
using SMSApi.Api.Response.Sendernames;
4+
5+
namespace SMSApi.Api.Action.Sendernames;
6+
7+
public sealed class CreateSendername : Action<Sendername>
8+
{
9+
private readonly string _sender;
10+
11+
public CreateSendername(string sender)
12+
{
13+
_sender = sender;
14+
}
15+
16+
protected override RequestMethod Method => RequestMethod.POST;
17+
18+
protected override ApiType ApiType() => Action.ApiType.Rest;
19+
20+
protected override ActionContentType ContentType => ActionContentType.Json;
21+
22+
protected override string Uri()
23+
{
24+
return "sms/sendernames";
25+
}
26+
27+
protected override (NameValueCollection, ISet<KeyValuePair<string, dynamic?>>?) Values()
28+
{
29+
return (
30+
new NameValueCollection(),
31+
new HashSet<KeyValuePair<string, dynamic?>> { KeyValuePair.Create<string, dynamic>("sender", _sender) }
32+
);
33+
}
34+
}

smsapi/Api/Response/Sendernames/Sendername.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
using System;
2+
using SMSApi.Api.Response.ResponseResolver;
23

34
namespace SMSApi.Api.Response.Sendernames;
45

5-
public readonly record struct Sendername
6+
public readonly record struct Sendername : IResponseCodeAwareResolver
67
{
78
public readonly DateTime CreatedAt;
89

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using SMSApi.Api;
3+
using SMSApi.Api.Action.Sendernames;
4+
5+
namespace smsapiTests.Unit.Action.Sendernames;
6+
7+
[TestClass]
8+
public class CreateSendernameRequestTest
9+
{
10+
private readonly SpyProxy _spyProxy = new();
11+
private readonly ProxyAssert _proxyAssert;
12+
13+
public CreateSendernameRequestTest()
14+
{
15+
_proxyAssert = new ProxyAssert(_spyProxy);
16+
}
17+
18+
[TestMethod]
19+
public void uri_is_valid()
20+
{
21+
Create();
22+
23+
_proxyAssert.AssertUriEquals("sms/sendernames");
24+
}
25+
26+
[TestMethod]
27+
public void request_method_is_post()
28+
{
29+
Create();
30+
31+
_proxyAssert.AssertRequestMethod(RequestMethod.POST);
32+
}
33+
34+
[TestMethod]
35+
public void request_contains_sender()
36+
{
37+
var sender = "any sender";
38+
39+
Create(sender);
40+
41+
_proxyAssert.AssertParametersContain("sender", sender);
42+
}
43+
44+
private void Create(string? sender = null)
45+
{
46+
var action = new CreateSendername(sender ?? "any");
47+
action.Proxy(_spyProxy);
48+
action.Execute();
49+
}
50+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Net;
4+
using Microsoft.VisualStudio.TestTools.UnitTesting;
5+
using SMSApi.Api;
6+
using SMSApi.Api.Action.Sendernames;
7+
using SMSApi.Api.Response.Sendernames;
8+
using smsapiTests.Unit.Fixture;
9+
using smsapiTests.Unit.Helper;
10+
11+
namespace smsapiTests.Unit.Action.Sendernames;
12+
13+
[TestClass]
14+
public class CreateSendernameResponseTest
15+
{
16+
private readonly ProxyStub _proxyStub = new();
17+
18+
[TestMethod]
19+
public void map_response_to_sendername()
20+
{
21+
var createdAt = "2018-11-08T09:36:53+01:00";
22+
var isDefault = new Random().NextBoolean();
23+
var sender = "any sender";
24+
var status = "any status";
25+
var response = new Dictionary<string, dynamic>
26+
{
27+
{ "created_at", createdAt },
28+
{ "is_default", isDefault },
29+
{ "sender", sender },
30+
{ "status", status },
31+
};
32+
_proxyStub.SyncExecutionResponse = new HttpResponseEntity(
33+
response.ToHttpEntityStreamTask(),
34+
HttpStatusCode.Created
35+
);
36+
37+
var createdSendername = Create();
38+
39+
Assert.AreEqual(DateTime.Parse(createdAt), createdSendername.CreatedAt);
40+
Assert.AreEqual(isDefault, createdSendername.IsDefault);
41+
Assert.AreEqual(sender, createdSendername.Sender);
42+
Assert.AreEqual(status, createdSendername.Status);
43+
}
44+
45+
private Sendername Create()
46+
{
47+
var action = new CreateSendername("any");
48+
action.Proxy(_proxyStub);
49+
50+
return action.Execute();
51+
}
52+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
3+
namespace smsapiTests.Unit.Helper;
4+
5+
public static class RandomHelper
6+
{
7+
public static bool NextBoolean(this Random random)
8+
{
9+
return random.Next() > int.MaxValue / 2;
10+
}
11+
}

0 commit comments

Comments
 (0)