@@ -1874,4 +1874,219 @@ describe('RovoDevApiClient', () => {
18741874 ) ;
18751875 } ) ;
18761876 } ) ;
1877+
1878+ describe ( 'getAgentModel method' , ( ) => {
1879+ it ( 'should return current agent model successfully' , async ( ) => {
1880+ const mockGetAgentModelResponse = {
1881+ model_name : 'GPT-4' ,
1882+ model_id : 'gpt-4' ,
1883+ credit_multiplier : '1.5' ,
1884+ message : 'Current model is GPT-4' ,
1885+ } ;
1886+ const mockResponse = {
1887+ status : 200 ,
1888+ json : jest . fn ( ) . mockResolvedValue ( mockGetAgentModelResponse ) ,
1889+ headers : mockStandardResponseHeaders ( ) ,
1890+ } as unknown as Response ;
1891+
1892+ mockFetch . mockResolvedValue ( mockResponse ) ;
1893+
1894+ const result = await client . getAgentModel ( ) ;
1895+
1896+ expect ( mockFetch ) . toHaveBeenCalledWith ( 'http://localhost:8080/v3/agent-model' , {
1897+ method : 'GET' ,
1898+ headers : {
1899+ accept : 'text/event-stream' ,
1900+ 'Content-Type' : 'application/json' ,
1901+ Authorization : 'Bearer sessionToken' ,
1902+ } ,
1903+ body : undefined ,
1904+ } ) ;
1905+ expect ( result ) . toEqual ( mockGetAgentModelResponse ) ;
1906+ expect ( result . model_id ) . toBe ( 'gpt-4' ) ;
1907+ expect ( result . model_name ) . toBe ( 'GPT-4' ) ;
1908+ expect ( result . credit_multiplier ) . toBe ( '1.5' ) ;
1909+ } ) ;
1910+
1911+ it ( 'should throw error when API call fails' , async ( ) => {
1912+ const mockResponse = {
1913+ status : 500 ,
1914+ statusText : 'Internal Server Error' ,
1915+ headers : mockStandardResponseHeaders ( ) ,
1916+ } as Response ;
1917+
1918+ mockFetch . mockResolvedValue ( mockResponse ) ;
1919+
1920+ await expect ( client . getAgentModel ( ) ) . rejects . toThrow ( "Failed to fetch '/v3/agent-model API: HTTP 500" ) ;
1921+ } ) ;
1922+ } ) ;
1923+
1924+ describe ( 'setAgentModel method' , ( ) => {
1925+ it ( 'should set agent model successfully' , async ( ) => {
1926+ const mockSetAgentModelResponse = {
1927+ model_name : 'GPT-4' ,
1928+ model_id : 'gpt-4' ,
1929+ message : 'Agent model set to GPT-4' ,
1930+ } ;
1931+ const mockResponse = {
1932+ status : 200 ,
1933+ json : jest . fn ( ) . mockResolvedValue ( mockSetAgentModelResponse ) ,
1934+ headers : mockStandardResponseHeaders ( ) ,
1935+ } as unknown as Response ;
1936+
1937+ mockFetch . mockResolvedValue ( mockResponse ) ;
1938+
1939+ const result = await client . setAgentModel ( 'gpt-4' ) ;
1940+
1941+ expect ( mockFetch ) . toHaveBeenCalledWith ( 'http://localhost:8080/v3/agent-model' , {
1942+ method : 'PUT' ,
1943+ headers : {
1944+ accept : 'text/event-stream' ,
1945+ 'Content-Type' : 'application/json' ,
1946+ Authorization : 'Bearer sessionToken' ,
1947+ } ,
1948+ body : JSON . stringify ( { model_id : 'gpt-4' } ) ,
1949+ } ) ;
1950+ expect ( result . model_id ) . toBe ( 'gpt-4' ) ;
1951+ expect ( result . message ) . toBe ( 'Agent model set to GPT-4' ) ;
1952+ } ) ;
1953+
1954+ it ( 'should handle different model IDs' , async ( ) => {
1955+ const mockSetAgentModelResponse = {
1956+ model_name : 'Claude 3' ,
1957+ model_id : 'claude-3' ,
1958+ message : 'Agent model set to Claude 3' ,
1959+ } ;
1960+ const mockResponse = {
1961+ status : 200 ,
1962+ json : jest . fn ( ) . mockResolvedValue ( mockSetAgentModelResponse ) ,
1963+ headers : mockStandardResponseHeaders ( ) ,
1964+ } as unknown as Response ;
1965+
1966+ mockFetch . mockResolvedValue ( mockResponse ) ;
1967+
1968+ const result = await client . setAgentModel ( 'claude-3' ) ;
1969+
1970+ expect ( mockFetch ) . toHaveBeenCalledWith ( 'http://localhost:8080/v3/agent-model' , {
1971+ method : 'PUT' ,
1972+ headers : {
1973+ accept : 'text/event-stream' ,
1974+ 'Content-Type' : 'application/json' ,
1975+ Authorization : 'Bearer sessionToken' ,
1976+ } ,
1977+ body : JSON . stringify ( { model_id : 'claude-3' } ) ,
1978+ } ) ;
1979+ expect ( result . model_id ) . toBe ( 'claude-3' ) ;
1980+ } ) ;
1981+
1982+ it ( 'should throw error when API call fails' , async ( ) => {
1983+ const mockResponse = {
1984+ status : 500 ,
1985+ statusText : 'Internal Server Error' ,
1986+ headers : mockStandardResponseHeaders ( ) ,
1987+ } as Response ;
1988+
1989+ mockFetch . mockResolvedValue ( mockResponse ) ;
1990+
1991+ await expect ( client . setAgentModel ( 'gpt-4' ) ) . rejects . toThrow (
1992+ "Failed to fetch '/v3/agent-model API: HTTP 500" ,
1993+ ) ;
1994+ } ) ;
1995+
1996+ it ( 'should throw error when API returns 400 (invalid model)' , async ( ) => {
1997+ const mockResponse = {
1998+ status : 400 ,
1999+ statusText : 'Bad Request' ,
2000+ headers : mockStandardResponseHeaders ( ) ,
2001+ } as Response ;
2002+
2003+ mockFetch . mockResolvedValue ( mockResponse ) ;
2004+
2005+ await expect ( client . setAgentModel ( 'invalid-model' ) ) . rejects . toThrow (
2006+ "Failed to fetch '/v3/agent-model API: HTTP 400" ,
2007+ ) ;
2008+ } ) ;
2009+ } ) ;
2010+
2011+ describe ( 'getAvailableAgentModels method' , ( ) => {
2012+ it ( 'should return list of available agent models successfully' , async ( ) => {
2013+ const mockAvailableModelsResponse = {
2014+ models : [
2015+ {
2016+ name : 'GPT-4' ,
2017+ model_id : 'gpt-4' ,
2018+ description : 'Most capable model' ,
2019+ credit_multiplier : '1.5' ,
2020+ } ,
2021+ {
2022+ name : 'GPT-3.5 Turbo' ,
2023+ model_id : 'gpt-3.5-turbo' ,
2024+ description : 'Fast and efficient' ,
2025+ credit_multiplier : '1.0' ,
2026+ } ,
2027+ {
2028+ name : 'Claude 3' ,
2029+ model_id : 'claude-3' ,
2030+ description : 'Anthropic model' ,
2031+ credit_multiplier : '2.0' ,
2032+ } ,
2033+ ] ,
2034+ } ;
2035+ const mockResponse = {
2036+ status : 200 ,
2037+ json : jest . fn ( ) . mockResolvedValue ( mockAvailableModelsResponse ) ,
2038+ headers : mockStandardResponseHeaders ( ) ,
2039+ } as unknown as Response ;
2040+
2041+ mockFetch . mockResolvedValue ( mockResponse ) ;
2042+
2043+ const result = await client . getAvailableAgentModels ( ) ;
2044+
2045+ expect ( mockFetch ) . toHaveBeenCalledWith ( 'http://localhost:8080/v3/agent-models' , {
2046+ method : 'GET' ,
2047+ headers : {
2048+ accept : 'text/event-stream' ,
2049+ 'Content-Type' : 'application/json' ,
2050+ Authorization : 'Bearer sessionToken' ,
2051+ } ,
2052+ body : undefined ,
2053+ } ) ;
2054+ expect ( result ) . toEqual ( mockAvailableModelsResponse ) ;
2055+ expect ( result . models ) . toHaveLength ( 3 ) ;
2056+ expect ( result . models [ 0 ] . model_id ) . toBe ( 'gpt-4' ) ;
2057+ expect ( result . models [ 0 ] . name ) . toBe ( 'GPT-4' ) ;
2058+ expect ( result . models [ 0 ] . credit_multiplier ) . toBe ( '1.5' ) ;
2059+ } ) ;
2060+
2061+ it ( 'should handle empty models list' , async ( ) => {
2062+ const mockAvailableModelsResponse = {
2063+ models : [ ] ,
2064+ } ;
2065+ const mockResponse = {
2066+ status : 200 ,
2067+ json : jest . fn ( ) . mockResolvedValue ( mockAvailableModelsResponse ) ,
2068+ headers : mockStandardResponseHeaders ( ) ,
2069+ } as unknown as Response ;
2070+
2071+ mockFetch . mockResolvedValue ( mockResponse ) ;
2072+
2073+ const result = await client . getAvailableAgentModels ( ) ;
2074+
2075+ expect ( result . models ) . toHaveLength ( 0 ) ;
2076+ } ) ;
2077+
2078+ it ( 'should throw error when API call fails' , async ( ) => {
2079+ const mockResponse = {
2080+ status : 500 ,
2081+ statusText : 'Internal Server Error' ,
2082+ headers : mockStandardResponseHeaders ( ) ,
2083+ } as Response ;
2084+
2085+ mockFetch . mockResolvedValue ( mockResponse ) ;
2086+
2087+ await expect ( client . getAvailableAgentModels ( ) ) . rejects . toThrow (
2088+ "Failed to fetch '/v3/agent-models API: HTTP 500" ,
2089+ ) ;
2090+ } ) ;
2091+ } ) ;
18772092} ) ;
0 commit comments