From 774f579808ef605dbea82adf9715878f5df154e9 Mon Sep 17 00:00:00 2001 From: Arnoud de Vries <6420061+arnoud-dv@users.noreply.github.com> Date: Fri, 30 Aug 2024 23:55:19 +0200 Subject: [PATCH] chore(angular-query): add injection context tests --- .../__tests__/inject-infinite-query.test.ts | 28 ++++++++++++++++ .../src/__tests__/inject-is-fetching.test.ts | 15 +++++++++ .../src/__tests__/inject-is-mutating.test.ts | 15 +++++++++ .../__tests__/inject-mutation-state.test.ts | 19 ++++++++++- .../src/__tests__/inject-mutation.test.ts | 32 ++++++++++++++++++- .../src/__tests__/inject-query.test.ts | 23 +++++++++++++ 6 files changed, 130 insertions(+), 2 deletions(-) diff --git a/packages/angular-query-experimental/src/__tests__/inject-infinite-query.test.ts b/packages/angular-query-experimental/src/__tests__/inject-infinite-query.test.ts index ccfd7a16dc..4948e57eb3 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-infinite-query.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-infinite-query.test.ts @@ -1,5 +1,6 @@ import { TestBed } from '@angular/core/testing' import { afterEach } from 'vitest' +import { Injector } from '@angular/core' import { QueryClient, injectInfiniteQuery, provideAngularQuery } from '..' import { expectSignals, infiniteFetcher } from './test-utils' @@ -59,4 +60,31 @@ describe('injectInfiniteQuery', () => { status: 'success', }) }) + + describe('injection context', () => { + test('throws NG0203 with descriptive error outside injection context', () => { + expect(() => { + injectInfiniteQuery(() => ({ + queryKey: ['injectionContextError'], + queryFn: infiniteFetcher, + initialPageParam: 0, + getNextPageParam: () => 12, + })) + }).toThrowError(/NG0203(.*?)injectInfiniteQuery/) + }) + + test('can be used outside injection context when passing an injector', () => { + const query = injectInfiniteQuery( + () => ({ + queryKey: ['manualInjector'], + queryFn: infiniteFetcher, + initialPageParam: 0, + getNextPageParam: () => 12, + }), + TestBed.inject(Injector), + ) + + expect(query.status()).toBe('pending') + }) + }) }) diff --git a/packages/angular-query-experimental/src/__tests__/inject-is-fetching.test.ts b/packages/angular-query-experimental/src/__tests__/inject-is-fetching.test.ts index 6949800ea9..db75cba557 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-is-fetching.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-is-fetching.test.ts @@ -1,5 +1,6 @@ import { TestBed, fakeAsync, flush, tick } from '@angular/core/testing' import { beforeEach, describe, expect } from 'vitest' +import { Injector } from '@angular/core' import { QueryClient, injectIsFetching, @@ -34,4 +35,18 @@ describe('injectIsFetching', () => { flush() expect(isFetching()).toStrictEqual(0) })) + + describe('injection context', () => { + test('throws NG0203 with descriptive error outside injection context', () => { + expect(() => { + injectIsFetching() + }).toThrowError(/NG0203(.*?)injectIsFetching/) + }) + + test('can be used outside injection context when passing an injector', () => { + expect( + injectIsFetching(undefined, TestBed.inject(Injector)), + ).not.toThrow() + }) + }) }) diff --git a/packages/angular-query-experimental/src/__tests__/inject-is-mutating.test.ts b/packages/angular-query-experimental/src/__tests__/inject-is-mutating.test.ts index c8e381f592..e6d1f775eb 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-is-mutating.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-is-mutating.test.ts @@ -1,5 +1,6 @@ import { beforeEach, describe } from 'vitest' import { TestBed, fakeAsync, tick } from '@angular/core/testing' +import { Injector } from '@angular/core' import { QueryClient, injectIsMutating, @@ -38,4 +39,18 @@ describe('injectIsMutating', () => { expect(isMutating()).toBe(1) }) })) + + describe('injection context', () => { + test('throws NG0203 with descriptive error outside injection context', () => { + expect(() => { + injectIsMutating() + }).toThrowError(/NG0203(.*?)injectIsMutating/) + }) + + test('can be used outside injection context when passing an injector', () => { + expect( + injectIsMutating(undefined, TestBed.inject(Injector)), + ).not.toThrow() + }) + }) }) diff --git a/packages/angular-query-experimental/src/__tests__/inject-mutation-state.test.ts b/packages/angular-query-experimental/src/__tests__/inject-mutation-state.test.ts index 856d643dd1..07e4ae4ae3 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-mutation-state.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-mutation-state.test.ts @@ -1,4 +1,4 @@ -import { Component, input, signal } from '@angular/core' +import { Component, Injector, input, signal } from '@angular/core' import { TestBed } from '@angular/core/testing' import { describe, expect, test, vi } from 'vitest' import { By } from '@angular/platform-browser' @@ -173,5 +173,22 @@ describe('injectMutationState', () => { expect(spans).toEqual(['success', 'error']) }) + + describe('injection context', () => { + test('throws NG0203 with descriptive error outside injection context', () => { + expect(() => { + injectMutationState() + }).toThrowError(/NG0203(.*?)injectMutationState/) + }) + + test('can be used outside injection context when passing an injector', () => { + const injector = TestBed.inject(Injector) + expect( + injectMutationState(undefined, { + injector, + }), + ).not.toThrow() + }) + }) }) }) diff --git a/packages/angular-query-experimental/src/__tests__/inject-mutation.test.ts b/packages/angular-query-experimental/src/__tests__/inject-mutation.test.ts index ad9dc3305d..aee351baf9 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-mutation.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-mutation.test.ts @@ -1,4 +1,11 @@ -import { Component, Injectable, inject, input, signal } from '@angular/core' +import { + Component, + Injectable, + Injector, + inject, + input, + signal, +} from '@angular/core' import { TestBed } from '@angular/core/testing' import { describe, expect, vi } from 'vitest' import { By } from '@angular/platform-browser' @@ -494,4 +501,27 @@ describe('injectMutation', () => { ).toEqual('test') expect(errorSpy).not.toHaveBeenCalled() }) + + describe('injection context', () => { + test('throws NG0203 with descriptive error outside injection context', () => { + expect(() => { + injectMutation(() => ({ + mutationKey: ['injectionContextError'], + mutationFn: () => Promise.resolve(), + })) + }).toThrowError(/NG0203(.*?)injectMutation/) + }) + + test('can be used outside injection context when passing an injector', () => { + expect(() => { + injectMutation( + () => ({ + mutationKey: ['injectionContextError'], + mutationFn: () => Promise.resolve(), + }), + TestBed.inject(Injector), + ) + }).not.toThrow() + }) + }) }) diff --git a/packages/angular-query-experimental/src/__tests__/inject-query.test.ts b/packages/angular-query-experimental/src/__tests__/inject-query.test.ts index f70c30f2ff..94f1f1bc87 100644 --- a/packages/angular-query-experimental/src/__tests__/inject-query.test.ts +++ b/packages/angular-query-experimental/src/__tests__/inject-query.test.ts @@ -618,4 +618,27 @@ describe('injectQuery', () => { expect(fixture.componentInstance.query.data()).toEqual('test name 2') })) + + describe('injection context', () => { + test('throws NG0203 with descriptive error outside injection context', () => { + expect(() => { + injectQuery(() => ({ + queryKey: ['injectionContextError'], + queryFn: simpleFetcher, + })) + }).toThrowError(/NG0203(.*?)injectQuery/) + }) + + test('can be used outside injection context when passing an injector', () => { + const query = injectQuery( + () => ({ + queryKey: ['manualInjector'], + queryFn: simpleFetcher, + }), + TestBed.inject(Injector), + ) + + expect(query.status()).toBe('pending') + }) + }) })