12
12
// See the License for the specific language governing permissions and
13
13
// limitations under the License.
14
14
15
- @testable import GoogleGenerativeAI
16
15
import XCTest
17
16
17
+ @testable import FirebaseVertexAI
18
+
18
19
@available ( iOS 15 . 0 , macOS 12 . 0 , macCatalyst 15 . 0 , * )
19
20
final class GenerativeModelTests : XCTestCase {
20
21
let testPrompt = " What sorts of questions can I ask you? "
@@ -32,7 +33,13 @@ final class GenerativeModelTests: XCTestCase {
32
33
let configuration = URLSessionConfiguration . default
33
34
configuration. protocolClasses = [ MockURLProtocol . self]
34
35
urlSession = try XCTUnwrap ( URLSession ( configuration: configuration) )
35
- model = GenerativeModel ( name: " my-model " , apiKey: " API_KEY " , urlSession: urlSession)
36
+ model = GenerativeModel (
37
+ name: " my-model " ,
38
+ apiKey: " API_KEY " ,
39
+ requestOptions: RequestOptions ( ) ,
40
+ appCheck: nil ,
41
+ urlSession: urlSession
42
+ )
36
43
}
37
44
38
45
override func tearDown( ) {
@@ -163,6 +170,8 @@ final class GenerativeModelTests: XCTestCase {
163
170
// Model name is prefixed with "models/".
164
171
name: " models/test-model " ,
165
172
apiKey: " API_KEY " ,
173
+ requestOptions: RequestOptions ( ) ,
174
+ appCheck: nil ,
166
175
urlSession: urlSession
167
176
)
168
177
@@ -181,10 +190,13 @@ final class GenerativeModelTests: XCTestCase {
181
190
do {
182
191
_ = try await model. generateContent ( testPrompt)
183
192
XCTFail ( " Should throw GenerateContentError.internalError; no error thrown. " )
184
- } catch let GenerateContentError . invalidAPIKey( message) {
185
- XCTAssertEqual ( message, " API key not valid. Please pass a valid API key. " )
193
+ } catch let GenerateContentError . internalError( error as RPCError ) {
194
+ XCTAssertEqual ( error. httpResponseCode, 400 )
195
+ XCTAssertEqual ( error. status, . invalidArgument)
196
+ XCTAssertEqual ( error. message, " API key not valid. Please pass a valid API key. " )
197
+ return
186
198
} catch {
187
- XCTFail ( " Should throw GenerateContentError.invalidAPIKey ; error thrown: \( error) " )
199
+ XCTFail ( " Should throw GenerateContentError.internalError(RPCError) ; error thrown: \( error) " )
188
200
}
189
201
}
190
202
@@ -342,24 +354,6 @@ final class GenerativeModelTests: XCTestCase {
342
354
}
343
355
}
344
356
345
- func testGenerateContent_failure_unsupportedUserLocation( ) async throws {
346
- MockURLProtocol
347
- . requestHandler = try httpRequestHandler (
348
- forResource: " unary-failure-unsupported-user-location " ,
349
- withExtension: " json " ,
350
- statusCode: 400
351
- )
352
-
353
- do {
354
- _ = try await model. generateContent ( testPrompt)
355
- XCTFail ( " Should throw GenerateContentError.unsupportedUserLocation; no error thrown. " )
356
- } catch GenerateContentError . unsupportedUserLocation {
357
- return
358
- }
359
-
360
- XCTFail ( " Expected an unsupported user location error. " )
361
- }
362
-
363
357
func testGenerateContent_failure_nonHTTPResponse( ) async throws {
364
358
MockURLProtocol . requestHandler = try nonHTTPRequestHandler ( )
365
359
@@ -468,6 +462,7 @@ final class GenerativeModelTests: XCTestCase {
468
462
name: " my-model " ,
469
463
apiKey: " API_KEY " ,
470
464
requestOptions: requestOptions,
465
+ appCheck: nil ,
471
466
urlSession: urlSession
472
467
)
473
468
@@ -490,8 +485,10 @@ final class GenerativeModelTests: XCTestCase {
490
485
for try await _ in stream {
491
486
XCTFail ( " No content is there, this shouldn't happen. " )
492
487
}
493
- } catch GenerateContentError . invalidAPIKey {
494
- // invalidAPIKey error is as expected, nothing else to check.
488
+ } catch let GenerateContentError . internalError( error as RPCError ) {
489
+ XCTAssertEqual ( error. httpResponseCode, 400 )
490
+ XCTAssertEqual ( error. status, . invalidArgument)
491
+ XCTAssertEqual ( error. message, " API key not valid. Please pass a valid API key. " )
495
492
return
496
493
}
497
494
@@ -747,26 +744,6 @@ final class GenerativeModelTests: XCTestCase {
747
744
XCTFail ( " Expected an internal decoding error. " )
748
745
}
749
746
750
- func testGenerateContentStream_failure_unsupportedUserLocation( ) async throws {
751
- MockURLProtocol
752
- . requestHandler = try httpRequestHandler (
753
- forResource: " unary-failure-unsupported-user-location " ,
754
- withExtension: " json " ,
755
- statusCode: 400
756
- )
757
-
758
- let stream = model. generateContentStream ( testPrompt)
759
- do {
760
- for try await content in stream {
761
- XCTFail ( " Unexpected content in stream: \( content) " )
762
- }
763
- } catch GenerateContentError . unsupportedUserLocation {
764
- return
765
- }
766
-
767
- XCTFail ( " Expected an unsupported user location error. " )
768
- }
769
-
770
747
func testGenerateContentStream_requestOptions_customTimeout( ) async throws {
771
748
let expectedTimeout = 150.0
772
749
MockURLProtocol
@@ -780,6 +757,7 @@ final class GenerativeModelTests: XCTestCase {
780
757
name: " my-model " ,
781
758
apiKey: " API_KEY " ,
782
759
requestOptions: requestOptions,
760
+ appCheck: nil ,
783
761
urlSession: urlSession
784
762
)
785
763
@@ -837,6 +815,7 @@ final class GenerativeModelTests: XCTestCase {
837
815
name: " my-model " ,
838
816
apiKey: " API_KEY " ,
839
817
requestOptions: requestOptions,
818
+ appCheck: nil ,
840
819
urlSession: urlSession
841
820
)
842
821
@@ -851,23 +830,38 @@ final class GenerativeModelTests: XCTestCase {
851
830
let modelName = " my-model "
852
831
let modelResourceName = " models/ \( modelName) "
853
832
854
- model = GenerativeModel ( name: modelName, apiKey: " API_KEY " )
833
+ model = GenerativeModel (
834
+ name: modelName,
835
+ apiKey: " API_KEY " ,
836
+ requestOptions: RequestOptions ( ) ,
837
+ appCheck: nil
838
+ )
855
839
856
840
XCTAssertEqual ( model. modelResourceName, modelResourceName)
857
841
}
858
842
859
843
func testModelResourceName_modelsPrefix( ) async throws {
860
844
let modelResourceName = " models/my-model "
861
845
862
- model = GenerativeModel ( name: modelResourceName, apiKey: " API_KEY " )
846
+ model = GenerativeModel (
847
+ name: modelResourceName,
848
+ apiKey: " API_KEY " ,
849
+ requestOptions: RequestOptions ( ) ,
850
+ appCheck: nil
851
+ )
863
852
864
853
XCTAssertEqual ( model. modelResourceName, modelResourceName)
865
854
}
866
855
867
856
func testModelResourceName_tunedModelsPrefix( ) async throws {
868
857
let tunedModelResourceName = " tunedModels/my-model "
869
858
870
- model = GenerativeModel ( name: tunedModelResourceName, apiKey: " API_KEY " )
859
+ model = GenerativeModel (
860
+ name: tunedModelResourceName,
861
+ apiKey: " API_KEY " ,
862
+ requestOptions: RequestOptions ( ) ,
863
+ appCheck: nil
864
+ )
871
865
872
866
XCTAssertEqual ( model. modelResourceName, tunedModelResourceName)
873
867
}
0 commit comments