-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathGlobalFieldUnitTests.cs
More file actions
212 lines (169 loc) · 7.37 KB
/
GlobalFieldUnitTests.cs
File metadata and controls
212 lines (169 loc) · 7.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
using System;
using System.Collections.Generic;
using System.Reflection;
using AutoFixture;
using Contentstack.Core;
using Contentstack.Core.Configuration;
using Contentstack.Core.Models;
using Microsoft.Extensions.Options;
using Xunit;
namespace Contentstack.Core.Unit.Tests
{
/// <summary>
/// Unit tests for GlobalField class - uses mocks and AutoFixture, no real API calls
/// </summary>
public class GlobalFieldUnitTests
{
private readonly IFixture _fixture = new Fixture();
private ContentstackClient _client;
public GlobalFieldUnitTests()
{
Initialize();
}
private void Initialize()
{
var options = new ContentstackOptions()
{
ApiKey = _fixture.Create<string>(),
DeliveryToken = _fixture.Create<string>(),
Environment = _fixture.Create<string>()
};
_client = new ContentstackClient(new OptionsWrapper<ContentstackOptions>(options));
}
private GlobalField CreateGlobalField(string globalFieldUid = "test_global_field")
{
return _client.GlobalField(globalFieldUid);
}
#region IncludeBranch Tests
[Fact]
public void IncludeBranch_AddsQueryParameter()
{
// Arrange
var globalField = CreateGlobalField();
// Act
GlobalField result = globalField.IncludeBranch();
// Assert
Assert.NotNull(result);
Assert.Equal(globalField, result);
var urlQueriesField = typeof(GlobalField).GetField("UrlQueries",
BindingFlags.NonPublic | BindingFlags.Instance);
var urlQueries = (Dictionary<string, object>)urlQueriesField?.GetValue(globalField);
Assert.True(urlQueries?.ContainsKey("include_branch") ?? false);
// Value can be stored as bool "True" or string "true"
var branchValue = urlQueries?["include_branch"];
Assert.True(branchValue != null && (branchValue.ToString().Equals("True", StringComparison.OrdinalIgnoreCase) || (bool)branchValue));
}
#endregion
#region IncludeGlobalFieldSchema Tests
[Fact]
public void IncludeGlobalFieldSchema_AddsQueryParameter()
{
// Arrange
var globalField = CreateGlobalField();
// Act
GlobalField result = globalField.IncludeGlobalFieldSchema();
// Assert
Assert.NotNull(result);
Assert.Equal(globalField, result);
var urlQueriesField = typeof(GlobalField).GetField("UrlQueries",
BindingFlags.NonPublic | BindingFlags.Instance);
var urlQueries = (Dictionary<string, object>)urlQueriesField?.GetValue(globalField);
Assert.True(urlQueries?.ContainsKey("include_global_field_schema") ?? false);
// Value can be stored as bool "True" or string "true"
var schemaValue = urlQueries?["include_global_field_schema"];
Assert.True(schemaValue != null && (schemaValue.ToString().Equals("True", StringComparison.OrdinalIgnoreCase) || (bool)schemaValue));
}
#endregion
#region SetHeader and RemoveHeader Tests
[Fact]
public void SetHeader_AddsHeader()
{
// Arrange
var globalField = CreateGlobalField();
var key = "custom_header";
var value = _fixture.Create<string>();
// Act
globalField.SetHeader(key, value);
// Assert
var headersField = typeof(GlobalField).GetField("_Headers",
BindingFlags.NonPublic | BindingFlags.Instance);
var headers = (Dictionary<string, object>)headersField?.GetValue(globalField);
Assert.True(headers?.ContainsKey(key) ?? false);
Assert.Equal(value, headers?[key]?.ToString());
}
[Fact]
public void RemoveHeader_RemovesHeader()
{
// Arrange
var globalField = CreateGlobalField();
var key = "custom_header";
var value = _fixture.Create<string>();
globalField.SetHeader(key, value);
var headersField = typeof(GlobalField).GetField("_Headers",
BindingFlags.NonPublic | BindingFlags.Instance);
var headersBefore = (Dictionary<string, object>)headersField?.GetValue(globalField);
Assert.True(headersBefore?.ContainsKey(key) ?? false);
// Act
globalField.RemoveHeader(key);
// Assert
var headersAfter = (Dictionary<string, object>)headersField?.GetValue(globalField);
Assert.False(headersAfter?.ContainsKey(key) ?? true);
}
#endregion
#region GetContentstackError Tests
[Fact]
public void GetContentstackError_WithWebException_ReturnsContentstackException()
{
// Arrange
var method = typeof(GlobalField).GetMethod("GetContentstackError",
BindingFlags.NonPublic | BindingFlags.Static);
var webEx = new System.Net.WebException("Test error");
// Act
var result = method?.Invoke(null, new object[] { webEx }) as Contentstack.Core.Internals.ContentstackException;
// Assert
Assert.NotNull(result);
}
[Fact]
public void GetContentstackError_WithGenericException_ReturnsContentstackException()
{
// Arrange
var method = typeof(GlobalField).GetMethod("GetContentstackError",
BindingFlags.NonPublic | BindingFlags.Static);
var ex = new Exception("Test error");
// Act
var result = method?.Invoke(null, new object[] { ex }) as Contentstack.Core.Internals.ContentstackException;
// Assert
Assert.NotNull(result);
Assert.Equal("Test error", result.Message);
}
[Fact]
public void GetContentstackError_WithWebException_HandlesExceptionCorrectly()
{
// Arrange
var method = typeof(GlobalField).GetMethod("GetContentstackError",
BindingFlags.NonPublic | BindingFlags.Static);
var webEx = new System.Net.WebException("Test error");
// Act
var result = method?.Invoke(null, new object[] { webEx }) as Contentstack.Core.Internals.ContentstackException;
// Assert
Assert.NotNull(result);
// When WebException has no response, it should fall back to ex.Message
Assert.NotNull(result.Message);
}
[Fact]
public void ErrorHandling_WithWebException_ExtractsErrorMessage()
{
// Arrange
var method = typeof(GlobalField).GetMethod("GetContentstackError",
BindingFlags.NonPublic | BindingFlags.Static);
var errorMessage = "Global field error";
var ex = new Exception(errorMessage);
// Act
var result = method?.Invoke(null, new object[] { ex }) as Contentstack.Core.Internals.ContentstackException;
// Assert
Assert.NotNull(result);
Assert.Equal(errorMessage, result.Message);
}
#endregion
}
}