185 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			4.2 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 '@testing-library/jest-dom';
 | |
| 
 | |
| import React from 'react';
 | |
| 
 | |
| import { describe, it, expect, vi } from 'vitest';
 | |
| import { type BackgroundImageInfo } from '@coze-arch/bot-api/developer_api';
 | |
| 
 | |
| import {
 | |
|   computePosition,
 | |
|   getInitBackground,
 | |
|   getOriginImageFromBackgroundInfo,
 | |
| } from '../src/utils';
 | |
| 
 | |
| vi.mock('@coze-arch/bot-semi', () => ({
 | |
|   UIToast: {
 | |
|     error: vi.fn(),
 | |
|   },
 | |
| }));
 | |
| 
 | |
| vi.mock('@coze-common/chat-uikit', () => ({
 | |
|   MODE_CONFIG: {
 | |
|     pc: {
 | |
|       size: {
 | |
|         width: 486,
 | |
|         height: 346,
 | |
|       },
 | |
|       centerWidth: 346,
 | |
|     },
 | |
|     mobile: {
 | |
|       size: {
 | |
|         width: 248,
 | |
|         height: 346,
 | |
|       },
 | |
|       centerWidth: 206,
 | |
|     },
 | |
|   },
 | |
| }));
 | |
| 
 | |
| vi.mock('@coze-arch/coze-design', () => ({
 | |
|   Avatar: vi.fn(),
 | |
|   Tag: vi.fn(),
 | |
| }));
 | |
| vi.mock('@coze-arch/bot-error', () => ({
 | |
|   CustomError: vi.fn(() => Error),
 | |
| }));
 | |
| 
 | |
| vi.mock('@coze-arch/bot-error', () => ({
 | |
|   CustomError: vi.fn(() => Error),
 | |
| }));
 | |
| 
 | |
| describe('should compute position correctly', () => {
 | |
|   const cropperRef = React.createRef();
 | |
|   const cropperMock = {
 | |
|     getCanvasData: vi.fn(() => ({
 | |
|       left: 10,
 | |
|     })),
 | |
|     getImageData: vi.fn(() => ({
 | |
|       left: 5,
 | |
|       width: 20,
 | |
|     })),
 | |
|   };
 | |
|   // Using vi.spyOn to simulate the behavior of createRef
 | |
|   const createRefSpy = vi.spyOn(React, 'createRef').mockReturnValue(cropperRef);
 | |
|   // Manually set the value of cropperRef.current
 | |
|   cropperRef.current = {
 | |
|     cropper: cropperMock,
 | |
|   };
 | |
|   cropperRef.current = {
 | |
|     cropper: {
 | |
|       getCanvasData: vi.fn(() => ({
 | |
|         left: 10,
 | |
|       })),
 | |
|       getImageData: vi.fn(() => ({
 | |
|         left: 5,
 | |
|         width: 20,
 | |
|       })),
 | |
|     },
 | |
|   };
 | |
| 
 | |
|   const mode = 'pc';
 | |
|   const result = computePosition(mode, cropperRef);
 | |
|   expect(result.left).toBe(0.03);
 | |
|   expect(result.right).toBe(0.92);
 | |
|   // Restore the original behavior of createRef
 | |
|   createRefSpy.mockRestore();
 | |
| });
 | |
| 
 | |
| describe('getOriginImageFromBackgroundInfo', () => {
 | |
|   it('should return origin image info', () => {
 | |
|     const value: BackgroundImageInfo[] = [
 | |
|       {
 | |
|         web_background_image: {
 | |
|           origin_image_uri: '123',
 | |
|           origin_image_url: '234',
 | |
|         },
 | |
|       },
 | |
|     ];
 | |
|     const info = getOriginImageFromBackgroundInfo(value);
 | |
|     expect(info).toMatchObject({
 | |
|       uri: '123',
 | |
|       url: '234',
 | |
|     });
 | |
|   });
 | |
| });
 | |
| 
 | |
| describe('getInitBackground', () => {
 | |
|   it('should return origin image', () => {
 | |
|     const value: BackgroundImageInfo[] = [
 | |
|       {
 | |
|         web_background_image: {
 | |
|           origin_image_uri: '123',
 | |
|           origin_image_url: '234',
 | |
|         },
 | |
|       },
 | |
|     ];
 | |
|     const info = getInitBackground({
 | |
|       isGenerateSuccess: false,
 | |
|       originBackground: value,
 | |
|       selectedImageInfo: {
 | |
|         tar_uri: '222',
 | |
|         tar_url: '111',
 | |
|       },
 | |
|     });
 | |
|     expect(info).toMatchObject({
 | |
|       uri: '123',
 | |
|       url: '234',
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   it('should return selected image', () => {
 | |
|     const value: BackgroundImageInfo[] = [
 | |
|       {
 | |
|         web_background_image: {
 | |
|           origin_image_uri: '123',
 | |
|           origin_image_url: '234',
 | |
|         },
 | |
|       },
 | |
|     ];
 | |
|     const info = getInitBackground({
 | |
|       isGenerateSuccess: true,
 | |
|       originBackground: value,
 | |
|       selectedImageInfo: {
 | |
|         tar_uri: '222',
 | |
|         tar_url: '111',
 | |
|       },
 | |
|     });
 | |
|     expect(info).toMatchObject({
 | |
|       url: '111',
 | |
|     });
 | |
|   });
 | |
| 
 | |
|   it('should return empty image', () => {
 | |
|     const value: BackgroundImageInfo[] = [
 | |
|       {
 | |
|         web_background_image: {},
 | |
|       },
 | |
|     ];
 | |
|     const info = getInitBackground({
 | |
|       isGenerateSuccess: false,
 | |
|       originBackground: value,
 | |
|       selectedImageInfo: {
 | |
|         tar_uri: '222',
 | |
|         tar_url: '111',
 | |
|       },
 | |
|     });
 | |
|     expect(info).toMatchObject({});
 | |
|   });
 | |
| });
 |