1+ using System . Net ;
2+ using System . Text . Json ;
3+ using Bogus ;
4+ using QuickbaseNet . Requests ;
5+ using QuickbaseNet . Responses ;
6+ using QuickbaseNet . Services ;
7+ using QuickbaseNet . UnitTests . Mocks ;
8+
9+ namespace QuickbaseNet . UnitTests . QuickbaseClientTests ;
10+
11+ public class QuickbaseClientTests
12+ {
13+ private readonly MockHttpMessageHandler _mockHandler ;
14+ private readonly QuickbaseClient _client ;
15+ private const string TestRealm = "testRealm" ;
16+ private const string TestToken = "testToken" ;
17+ private const string BaseUrl = "http://localhost/" ;
18+
19+ public QuickbaseClientTests ( )
20+ {
21+ _mockHandler = SetupMockHandlerWithSuccessResponse ( ) ;
22+ _client = CreateConfiguredQuickbaseClient ( ) ;
23+ }
24+
25+ [ Fact ]
26+ public async Task QueryRecords_ReturnsSuccessResponse_WhenCalled ( )
27+ {
28+ // Arrange
29+ var request = new QuickbaseQueryRequest ( ) ;
30+
31+ // Act
32+ var response = await _client . QueryRecords ( request ) ;
33+
34+ // Assert
35+ Assert . True ( response . IsSuccess ) ;
36+ Assert . NotNull ( response . Value ) ;
37+ Assert . NotEmpty ( response . Value . Data ) ;
38+ Assert . NotEmpty ( response . Value . Fields ) ;
39+ Assert . NotNull ( response . Value . Metadata ) ;
40+ }
41+
42+ [ Fact ]
43+ public async Task QueryRecords_ReturnsErrorResponse_WhenBadRequestOccurs ( )
44+ {
45+ // Arrange
46+ SetupMockHandlerWithErrorResponse ( ) ;
47+ var request = new QuickbaseQueryRequest
48+ {
49+ From = "tableId" ,
50+ Where = "{1.CT.'query'}" ,
51+ Select = [ 1 , 2 , 3 ]
52+ } ;
53+
54+ // Act
55+ var actualResponse = await _client . QueryRecords ( request ) ;
56+
57+ // Assert
58+ Assert . False ( actualResponse . IsSuccess ) ;
59+ Assert . NotNull ( actualResponse . QuickbaseError ) ;
60+ }
61+
62+ #region Helpers
63+ private void SetupMockHandlerWithErrorResponse ( )
64+ {
65+ var faker = new Faker ( ) ;
66+ var errorResponse = new QuickbaseErrorResponse
67+ {
68+ Message = faker . Random . Words ( ) ,
69+ Description = faker . Lorem . Paragraph ( )
70+ } ;
71+
72+ _mockHandler . ResponseContent = JsonSerializer . Serialize ( errorResponse ) ;
73+ _mockHandler . ResponseStatusCode = HttpStatusCode . BadRequest ;
74+ }
75+
76+ private MockHttpMessageHandler SetupMockHandlerWithSuccessResponse ( )
77+ {
78+ var mockJsonResponse = GetMockJsonResponse ( ) ;
79+ return new MockHttpMessageHandler
80+ {
81+ ResponseContent = mockJsonResponse ,
82+ ResponseStatusCode = HttpStatusCode . OK
83+ } ;
84+ }
85+
86+ private QuickbaseClient CreateConfiguredQuickbaseClient ( )
87+ {
88+ var httpClient = new HttpClient ( _mockHandler )
89+ {
90+ BaseAddress = new Uri ( BaseUrl )
91+ } ;
92+ return new QuickbaseClient ( TestRealm , TestToken )
93+ {
94+ Client = httpClient
95+ } ;
96+ }
97+
98+ private static string GetMockJsonResponse ( )
99+ {
100+ // JSON response string...
101+ return @"{
102+ ""data"": [
103+ {
104+ ""6"": { ""value"": ""Andre Harris"" },
105+ ""7"": { ""value"": 10 },
106+ ""8"": { ""value"": ""2019-12-18T08:00:00Z"" }
107+ }
108+ ],
109+ ""fields"": [
110+ { ""id"": 6, ""label"": ""Full Name"", ""type"": ""text"" },
111+ { ""id"": 7, ""label"": ""Amount"", ""type"": ""numeric"" },
112+ { ""id"": 8, ""label"": ""Date time"", ""type"": ""date time"" }
113+ ],
114+ ""metadata"": {
115+ ""totalRecords"": 10,
116+ ""numRecords"": 1,
117+ ""numFields"": 3,
118+ ""skip"": 0
119+ }
120+ }" ;
121+ }
122+
123+ #endregion
124+ }
0 commit comments