PluginProbe
BeyondWords – AI audio for publishers / 7.2.0
BeyondWords – AI audio for publishers v7.2.0
7.2.0 7.1.0 trunk 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.1.0 4.1.1 4.1.2 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.3.0 4.4.0 4.5.0 4.5.1 4.6.0 4.6.1 4.6.2 All 44 releases
← All changes | src/settings/store/index.test.js +46 -0 7.1.0 → 7.2.0 View file →
@@ -120,5 +120,51 @@
120 120 expect( await resolve.getVideoSizes( '' ) ).toEqual( [] );
121 121 expect( apiFetch ).not.toHaveBeenCalled();
122 122 } );
123 123 } );
124 +
125 + describe( 'list resolvers', () => {
126 + // [ selector, args, wraps the payload as the endpoint does ]
127 + const LISTS = [
128 + [ 'getLanguages', [], ( v ) => v ],
129 + [ 'getVoices', [ 'en_US' ], ( v ) => v ],
130 + [ 'getScriptTemplates', [], ( v ) => v ],
131 + [ 'getVideoTemplates', [], ( v ) => v ],
132 + [ 'getVideoSizes', [ '11111' ], ( v ) => ( { sizes: v } ) ],
133 + ];
134 +
135 + const NON_ARRAYS = [
136 + [ 'an API error body', { code: 401, message: 'Unauthorized' } ],
137 + [ 'false', false ],
138 + [ 'null', null ],
139 + [ 'a string', 'nope' ],
140 + ];
141 +
142 + describe.each( LISTS )( '%s', ( selector, args, wrap ) => {
143 + it.each( NON_ARRAYS )(
144 + 'returns [] when the endpoint returns %s',
145 + async ( _label, payload ) => {
146 + apiFetch.mockResolvedValue( wrap( payload ) );
147 +
148 + const resolve = registry.resolveSelect( STORE );
149 + expect( await resolve[ selector ]( ...args ) ).toEqual(
150 + []
151 + );
152 + }
153 + );
154 +
155 + it( 'marks the resolution failed and keeps [] when the fetch rejects', async () => {
156 + apiFetch.mockRejectedValue( new Error( 'offline' ) );
157 +
158 + await expect(
159 + registry.resolveSelect( STORE )[ selector ]( ...args )
160 + ).rejects.toThrow( 'offline' );
161 +
162 + const select = registry.select( STORE );
163 + expect( select.hasResolutionFailed( selector, args ) ).toBe(
164 + true
165 + );
166 + expect( select[ selector ]( ...args ) ).toEqual( [] );
167 + } );
168 + } );
169 + } );
124 170 } );