coze-studio/frontend/infra/eslint-plugin/src/zustand/rules/prefer-shallow/index.test.ts

149 lines
3.8 KiB
TypeScript

/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ruleTester } from '../tester';
import { preferShallow } from './index';
const importSnippet = "\nimport { useShallow } from 'zustand/react/shallow';\n";
ruleTester.run('prefer-shallow', preferShallow, {
valid: [
'foo()',
'new Foo()',
'useShallowedFooStore()',
'useFooStore((s) => s.value)',
'useFooStore(selector)', // Temporary exemption
'useShallowFooStore(() => ({}))',
'useFooStore(useShallow(() => ({})))',
'useFooStore(useShallow(() => ([])))',
'useFooStore.getState()',
],
invalid: [
{
code: 'useFooStore(() => { return ({}) })',
errors: [
{
suggestions: [
{
output: `${importSnippet}useFooStore(useShallow(() => { return ({}) }))`,
messageId: 'useShallow',
},
],
messageId: 'preferShallow',
},
],
},
{
code: 'useFooStore(() => { return {} })',
errors: [
{
suggestions: [
{
output: `${importSnippet}useFooStore(useShallow(() => { return {} }))`,
messageId: 'useShallow',
},
],
messageId: 'preferShallow',
},
],
},
{
code: 'useFooStore(() => ({}))',
errors: [
{
suggestions: [
{
output: `${importSnippet}useFooStore(useShallow(() => ({})))`,
messageId: 'useShallow',
},
],
messageId: 'preferShallow',
},
],
},
{
code: 'useFooStore(() => { return ([]) })',
errors: [
{
suggestions: [
{
output: `${importSnippet}useFooStore(useShallow(() => { return ([]) }))`,
messageId: 'useShallow',
},
],
messageId: 'preferShallow',
},
],
},
{
code: 'useFooStore(() => { return [] })',
errors: [
{
suggestions: [
{
messageId: 'useShallow',
output: `${importSnippet}useFooStore(useShallow(() => { return [] }))`,
},
],
messageId: 'preferShallow',
},
],
},
{
code: 'useFooStore(() => ([]))',
errors: [
{
suggestions: [
{
messageId: 'useShallow',
output: `${importSnippet}useFooStore(useShallow(() => ([])))`,
},
],
messageId: 'preferShallow',
},
],
},
{
code: 'useFooStore(() => { const a = {}; return a;})',
errors: [
{
suggestions: [
{
output: `${importSnippet}useFooStore(useShallow(() => { const a = {}; return a;}))`,
messageId: 'useShallow',
},
],
messageId: 'preferShallow',
},
],
},
{
code: 'useFooStore(() => { const a = []; return a;})',
errors: [
{
suggestions: [
{
output: `${importSnippet}useFooStore(useShallow(() => { const a = []; return a;}))`,
messageId: 'useShallow',
},
],
messageId: 'preferShallow',
},
],
},
],
});