120 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { tap, expect } from '@git.zone/tstest/tapbundle';
 | 
						|
 | 
						|
// For browser tests, we need to import from a browser-safe path
 | 
						|
// that doesn't trigger Node.js module imports
 | 
						|
import { CoreRequest, CoreResponse } from '../ts/core/index.js';
 | 
						|
import type { ICoreRequestOptions } from '../ts/core_base/types.js';
 | 
						|
 | 
						|
tap.test('browser: should request a JSON document over https', async () => {
 | 
						|
  const request = new CoreRequest(
 | 
						|
    'https://jsonplaceholder.typicode.com/posts/1',
 | 
						|
  );
 | 
						|
  const response = await request.fire();
 | 
						|
 | 
						|
  expect(response).not.toBeNull();
 | 
						|
  expect(response).toHaveProperty('status');
 | 
						|
  expect(response.status).toEqual(200);
 | 
						|
 | 
						|
  const data = await response.json();
 | 
						|
  expect(data).toHaveProperty('id');
 | 
						|
  expect(data.id).toEqual(1);
 | 
						|
  expect(data).toHaveProperty('title');
 | 
						|
});
 | 
						|
 | 
						|
tap.test('browser: should handle CORS requests', async () => {
 | 
						|
  const options: ICoreRequestOptions = {
 | 
						|
    headers: {
 | 
						|
      Accept: 'application/vnd.github.v3+json',
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  const request = new CoreRequest(
 | 
						|
    'https://api.github.com/users/github',
 | 
						|
    options,
 | 
						|
  );
 | 
						|
  const response = await request.fire();
 | 
						|
 | 
						|
  expect(response).not.toBeNull();
 | 
						|
  expect(response.status).toEqual(200);
 | 
						|
 | 
						|
  const data = await response.json();
 | 
						|
  expect(data).toHaveProperty('login');
 | 
						|
  expect(data.login).toEqual('github');
 | 
						|
});
 | 
						|
 | 
						|
tap.test('browser: should handle request timeouts', async () => {
 | 
						|
  let timedOut = false;
 | 
						|
 | 
						|
  const options: ICoreRequestOptions = {
 | 
						|
    timeout: 1, // Extremely short timeout to guarantee failure
 | 
						|
  };
 | 
						|
 | 
						|
  try {
 | 
						|
    // Use a URL that will definitely take longer than 1ms
 | 
						|
    const request = new CoreRequest(
 | 
						|
      'https://jsonplaceholder.typicode.com/posts/1',
 | 
						|
      options,
 | 
						|
    );
 | 
						|
    await request.fire();
 | 
						|
  } catch (error) {
 | 
						|
    timedOut = true;
 | 
						|
    // Accept any error since different browsers handle timeouts differently
 | 
						|
    expect(error).toBeDefined();
 | 
						|
  }
 | 
						|
 | 
						|
  expect(timedOut).toEqual(true);
 | 
						|
});
 | 
						|
 | 
						|
tap.test('browser: should handle POST requests with JSON', async () => {
 | 
						|
  const testData = {
 | 
						|
    title: 'foo',
 | 
						|
    body: 'bar',
 | 
						|
    userId: 1,
 | 
						|
  };
 | 
						|
 | 
						|
  const options: ICoreRequestOptions = {
 | 
						|
    method: 'POST',
 | 
						|
    requestBody: testData,
 | 
						|
  };
 | 
						|
 | 
						|
  const request = new CoreRequest(
 | 
						|
    'https://jsonplaceholder.typicode.com/posts',
 | 
						|
    options,
 | 
						|
  );
 | 
						|
  const response = await request.fire();
 | 
						|
 | 
						|
  expect(response.status).toEqual(201);
 | 
						|
 | 
						|
  const responseData = await response.json();
 | 
						|
  expect(responseData).toHaveProperty('id');
 | 
						|
  expect(responseData.title).toEqual(testData.title);
 | 
						|
  expect(responseData.body).toEqual(testData.body);
 | 
						|
  expect(responseData.userId).toEqual(testData.userId);
 | 
						|
});
 | 
						|
 | 
						|
tap.test('browser: should handle query parameters', async () => {
 | 
						|
  const options: ICoreRequestOptions = {
 | 
						|
    queryParams: {
 | 
						|
      userId: '2',
 | 
						|
    },
 | 
						|
  };
 | 
						|
 | 
						|
  const request = new CoreRequest(
 | 
						|
    'https://jsonplaceholder.typicode.com/posts',
 | 
						|
    options,
 | 
						|
  );
 | 
						|
  const response = await request.fire();
 | 
						|
 | 
						|
  expect(response.status).toEqual(200);
 | 
						|
 | 
						|
  const data = await response.json();
 | 
						|
  expect(Array.isArray(data)).toBeTrue();
 | 
						|
  // Verify we got posts filtered by userId 2
 | 
						|
  if (data.length > 0) {
 | 
						|
    expect(data[0]).toHaveProperty('userId');
 | 
						|
    expect(data[0].userId).toEqual(2);
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
export default tap.start();
 |