Skip to content

Commit

Permalink
chore: add interceptors storage tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Dzianis Dashkevich committed Oct 4, 2024
1 parent 6e9bea3 commit 99e634d
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 1 deletion.
2 changes: 1 addition & 1 deletion packages/playback/src/lib/utils/interceptors-storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export class InterceptorsStorage implements IInterceptorsStorage {
}

public getInterceptorsSet<K extends InterceptorType>(interceptorType: K): Set<InterceptorTypeToInterceptorMap[K]> {
return new Set(this.storage_.get(interceptorType) ?? []);
return new Set((this.storage_.get(interceptorType) as Set<InterceptorTypeToInterceptorMap[K]>) ?? []);
}

public removeInterceptor<K extends InterceptorType>(
Expand Down
91 changes: 91 additions & 0 deletions packages/playback/test/utils/interceptors-storage.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import { beforeEach, describe, expect, it } from 'vitest';
import { InterceptorsStorage } from '../../src/lib/utils/interceptors-storage';
import { InterceptorType } from '../../src/lib/consts/interceptor-type';

describe('InterceptorsStorage', () => {
let storage: InterceptorsStorage;

beforeEach(() => {
storage = new InterceptorsStorage();
});

it('should store the interceptor in the storage when added', () => {
const interceptor = async (request: Request): Promise<Request> => request;
storage.addInterceptor(InterceptorType.NetworkRequest, interceptor);
expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).has(interceptor)).toBe(true);
});

it('should not store duplicate interceptors for a type', () => {
const interceptor = async (request: Request): Promise<Request> => request;
storage.addInterceptor(InterceptorType.NetworkRequest, interceptor);
storage.addInterceptor(InterceptorType.NetworkRequest, interceptor);
expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).size).toBe(1);
});

it('should return the correct set of interceptors for a given type when retrieved', () => {
const interceptor1 = async (request: Request): Promise<Request> => request;
const interceptor2 = async (request: Request): Promise<Request> => request;
storage.addInterceptor(InterceptorType.NetworkRequest, interceptor1);
storage.addInterceptor(InterceptorType.NetworkRequest, interceptor2);

expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest)).toEqual(new Set([interceptor1, interceptor2]));
});

it('should remove the interceptor from the storage when deleted', () => {
const interceptor1 = async (request: Request): Promise<Request> => request;
const interceptor2 = async (request: Request): Promise<Request> => request;

storage.addInterceptor(InterceptorType.NetworkRequest, interceptor1);
storage.addInterceptor(InterceptorType.NetworkRequest, interceptor2);
storage.removeInterceptor(InterceptorType.NetworkRequest, interceptor1);

expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).has(interceptor1)).toBe(false);
expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).has(interceptor2)).toBe(true);
expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).size).toBe(1);
storage.removeInterceptor(InterceptorType.NetworkRequest, interceptor2);
expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).has(interceptor2)).toBe(false);
expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).size).toBe(0);
});

// Removing all interceptors for a type clears the set for that type
it('should clear the set when removing all interceptors for a type', () => {
expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).size).toBe(0);
expect(storage.getInterceptorsSet(InterceptorType.HlsPlaylistParse).size).toBe(0);

const interceptor1 = async (request: Request): Promise<Request> => request;
const interceptor2 = async (request: Request): Promise<Request> => request;
const interceptor3 = async (playlist: Uint8Array): Promise<Uint8Array> => playlist;

storage.addInterceptor(InterceptorType.NetworkRequest, interceptor1);
storage.addInterceptor(InterceptorType.NetworkRequest, interceptor2);
storage.addInterceptor(InterceptorType.HlsPlaylistParse, interceptor3);
expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).size).toBe(2);
expect(storage.getInterceptorsSet(InterceptorType.HlsPlaylistParse).size).toBe(1);

storage.removeAllInterceptorsForType(InterceptorType.NetworkRequest);

expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).size).toBe(0);
expect(storage.getInterceptorsSet(InterceptorType.HlsPlaylistParse).size).toBe(1);
});

// Removing all interceptors clears the entire storage
it('should clear the entire storage when all interceptors are removed', () => {
expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).size).toBe(0);
expect(storage.getInterceptorsSet(InterceptorType.HlsPlaylistParse).size).toBe(0);

const interceptor1 = async (request: Request): Promise<Request> => request;
const interceptor2 = async (request: Request): Promise<Request> => request;
const interceptor3 = async (playlist: Uint8Array): Promise<Uint8Array> => playlist;

storage.addInterceptor(InterceptorType.NetworkRequest, interceptor1);
storage.addInterceptor(InterceptorType.NetworkRequest, interceptor2);
storage.addInterceptor(InterceptorType.HlsPlaylistParse, interceptor3);
expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).size).toBe(2);
expect(storage.getInterceptorsSet(InterceptorType.HlsPlaylistParse).size).toBe(1);

storage.removeAllInterceptors();

expect(storage.getInterceptorsSet(InterceptorType.NetworkRequest).size).toBe(0);
expect(storage.getInterceptorsSet(InterceptorType.HlsPlaylistParse).size).toBe(0);
});
});

0 comments on commit 99e634d

Please sign in to comment.