11using System ;
22using System . Collections . Generic ;
3+ using JsonApiDotNetCore . Internal ;
34using JsonApiDotNetCore . Internal . Query ;
45using JsonApiDotNetCore . Services ;
56using Microsoft . AspNetCore . Http ;
@@ -13,13 +14,13 @@ namespace UnitTests.Services
1314 public class QueryAccessorTests
1415 {
1516 private readonly Mock < IJsonApiContext > _contextMock ;
16- private readonly Mock < ILoggerFactory > _loggerMock ;
17+ private readonly Mock < ILogger < QueryAccessor > > _loggerMock ;
1718 private readonly Mock < IQueryCollection > _queryMock ;
1819
1920 public QueryAccessorTests ( )
2021 {
2122 _contextMock = new Mock < IJsonApiContext > ( ) ;
22- _loggerMock = new Mock < ILoggerFactory > ( ) ;
23+ _loggerMock = new Mock < ILogger < QueryAccessor > > ( ) ;
2324 _queryMock = new Mock < IQueryCollection > ( ) ;
2425 }
2526
@@ -34,7 +35,7 @@ public void Can_Get_Guid_QueryValue()
3435 var query = new Dictionary < string , StringValues > {
3536 { filterQuery , value . ToString ( ) }
3637 } ;
37-
38+
3839 _queryMock . Setup ( q => q . GetEnumerator ( ) ) . Returns ( query . GetEnumerator ( ) ) ;
3940
4041 var querySet = new QuerySet ( _contextMock . Object , _queryMock . Object ) ;
@@ -50,5 +51,59 @@ public void Can_Get_Guid_QueryValue()
5051 Assert . True ( success ) ;
5152 Assert . Equal ( value , result ) ;
5253 }
54+
55+ [ Fact ]
56+ public void GetRequired_Throws_If_Not_Present ( )
57+ {
58+ // arrange
59+ const string key = "some-id" ;
60+ var filterQuery = $ "filter[{ key } ]";
61+ var value = Guid . NewGuid ( ) ;
62+
63+ var query = new Dictionary < string , StringValues > {
64+ { filterQuery , value . ToString ( ) }
65+ } ;
66+
67+ _queryMock . Setup ( q => q . GetEnumerator ( ) ) . Returns ( query . GetEnumerator ( ) ) ;
68+
69+ var querySet = new QuerySet ( _contextMock . Object , _queryMock . Object ) ;
70+ _contextMock . Setup ( c => c . QuerySet )
71+ . Returns ( querySet ) ;
72+
73+ var service = new QueryAccessor ( _contextMock . Object , _loggerMock . Object ) ;
74+
75+ // act
76+ var exception = Assert . Throws < JsonApiException > ( ( ) => service . GetRequired < Guid > ( "Invalid" ) ) ;
77+
78+ // assert
79+ Assert . Equal ( 422 , exception . GetStatusCode ( ) ) ;
80+ }
81+
82+ [ Fact ]
83+ public void GetRequired_Does_Not_Throw_If_Present ( )
84+ {
85+ // arrange
86+ const string key = "some-id" ;
87+ var filterQuery = $ "filter[{ key } ]";
88+ var value = Guid . NewGuid ( ) ;
89+
90+ var query = new Dictionary < string , StringValues > {
91+ { filterQuery , value . ToString ( ) }
92+ } ;
93+
94+ _queryMock . Setup ( q => q . GetEnumerator ( ) ) . Returns ( query . GetEnumerator ( ) ) ;
95+
96+ var querySet = new QuerySet ( _contextMock . Object , _queryMock . Object ) ;
97+ _contextMock . Setup ( c => c . QuerySet )
98+ . Returns ( querySet ) ;
99+
100+ var service = new QueryAccessor ( _contextMock . Object , _loggerMock . Object ) ;
101+
102+ // act
103+ var result = service . GetRequired < Guid > ( "SomeId" ) ;
104+
105+ // assert
106+ Assert . Equal ( value , result ) ;
107+ }
53108 }
54109}
0 commit comments