1- // __tests__/providers.test.js
2- import { jest } from "@jest/globals" ;
3- import dotenv from "dotenv" ;
4- dotenv . config ( ) ;
1+ // src/providers/providers.test.js
2+ import { jest , describe , expect , test , beforeEach } from '@jest/globals' ;
3+ import OpenAIEmbeddingProvider from '../../src/providers/OpenAIEmbeddingProvider.js' ;
54
6- import OpenAIEmbeddingProvider from "../../src/providers/OpenAIEmbeddingProvider.js" ;
7- import DeepSeekEmbeddingProvider from "../../src/providers/DeepSeekEmbeddingProvider.js" ;
8-
9- // ✅ Mock `axios` correctly
10- jest . unstable_mockModule ( "axios" , async ( ) => ( {
5+ // Mock axios
6+ jest . mock ( 'axios' , ( ) => ( {
117 default : {
128 create : jest . fn ( ( ) => ( {
13- post : jest . fn ( ) . mockImplementation ( async ( url , body ) => {
14- if ( url . includes ( "openai.com" ) ) {
15- return { data : { data : [ { embedding : Array ( 1536 ) . fill ( 0.1 ) } ] } } ;
16- } else if ( url . includes ( "deepseek.com" ) ) {
17- return { data : { data : [ { embedding : Array ( 1536 ) . fill ( Math . random ( ) * 0.02 - 0.01 ) } ] } } ; // ✅ Returns random small floats
9+ post : jest . fn ( ) . mockResolvedValue ( {
10+ data : {
11+ data : [ { embedding : Array ( 1536 ) . fill ( 0.1 ) } ]
1812 }
19- throw new Error ( "Unknown API endpoint" ) ;
20- } ) ,
21- } ) ) ,
22- } ,
13+ } )
14+ } ) )
15+ }
2316} ) ) ;
2417
25- describe ( " Embedding Providers" , ( ) => {
18+ describe ( ' Embedding Providers' , ( ) => {
2619 let provider ;
20+ const mockApiKey = 'test-key-123' ;
2721
2822 beforeEach ( ( ) => {
29- const providerType = process . env . EMBEDDING_PROVIDER || "openai" ;
30- const apiKey = process . env . EMBEDDING_API_KEY ;
31-
32- switch ( providerType ) {
33- case "openai" :
34- provider = new OpenAIEmbeddingProvider ( { apiKey } ) ;
35- break ;
36- case "deepseek" :
37- provider = new DeepSeekEmbeddingProvider ( { apiKey } ) ;
38- break ;
39- default :
40- throw new Error ( `Unsupported provider for embeddings: ${ providerType } ` ) ;
41- }
23+ // Reset mocks
24+ jest . clearAllMocks ( ) ;
25+
26+ provider = new OpenAIEmbeddingProvider ( {
27+ apiKey : mockApiKey ,
28+ model : 'text-embedding-3-small' ,
29+ dimensions : 1536
30+ } ) ;
4231 } ) ;
4332
44- test ( "should get embeddings from the selected provider" , async ( ) => {
45- const result = await provider . getEmbeddings ( [ "test" ] ) ;
46-
47- expect ( result ) . toHaveLength ( 1 ) ; // ✅ Ensures a single embedding
48- expect ( result [ 0 ] ) . toHaveLength ( 1536 ) ; // ✅ Ensures correct vector size
33+ test ( 'should initialize with proper configuration' , ( ) => {
34+ expect ( provider . apiKey ) . toBe ( mockApiKey ) ;
35+ expect ( provider . model ) . toBe ( 'text-embedding-3-small' ) ;
36+ } ) ;
4937
50- // ✅ Instead of checking for a fixed number, check for numerical range
51- expect ( typeof result [ 0 ] [ 0 ] ) . toBe ( "number" ) ;
38+ test ( 'should get embeddings from the OpenAI provider' , async ( ) => {
39+ const texts = [ 'test text' ] ;
40+ const result = await provider . getEmbeddings ( texts ) ;
41+
42+ expect ( result ) . toHaveLength ( 1 ) ;
43+ expect ( result [ 0 ] ) . toHaveLength ( 1536 ) ;
44+ expect ( typeof result [ 0 ] [ 0 ] ) . toBe ( 'number' ) ;
5245 expect ( result [ 0 ] [ 0 ] ) . toBeGreaterThanOrEqual ( - 1 ) ;
5346 expect ( result [ 0 ] [ 0 ] ) . toBeLessThanOrEqual ( 1 ) ;
54- } , 15000 ) ;
55- } ) ;
47+ } ) ;
48+
49+ test ( 'should handle empty input' , async ( ) => {
50+ const result = await provider . getEmbeddings ( [ ] ) ;
51+ expect ( result ) . toHaveLength ( 0 ) ;
52+ } ) ;
53+
54+ test ( 'should handle batch processing' , async ( ) => {
55+ const texts = Array ( 5 ) . fill ( 'test text' ) ;
56+ const result = await provider . getEmbeddings ( texts ) ;
57+ expect ( result ) . toHaveLength ( 5 ) ;
58+ expect ( result [ 0 ] ) . toHaveLength ( 1536 ) ;
59+ } ) ;
60+
61+ test ( 'should respect batch size limits' , async ( ) => {
62+ const provider = new OpenAIEmbeddingProvider ( {
63+ apiKey : mockApiKey ,
64+ batchSize : 2
65+ } ) ;
66+
67+ const texts = Array ( 5 ) . fill ( 'test text' ) ;
68+ const result = await provider . getEmbeddings ( texts ) ;
69+ expect ( result ) . toHaveLength ( 5 ) ;
70+ } ) ;
71+ } ) ;
0 commit comments