You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							36 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
	
	
							36 lines
						
					
					
						
							1.1 KiB
						
					
					
				| import { type Post } from 'contentlayer/generated';
 | |
| import { describe, expect, it } from 'vitest';
 | |
| 
 | |
| import { getTagsWithCount, searchPosts } from './search';
 | |
| 
 | |
| const posts = Array.from({ length: 10 }, (_, index) => ({
 | |
|   title: `Post ${index + 1}`,
 | |
|   tags: ['tag', `tag${index + 1}`],
 | |
|   excerpt: `Post ${index + 1} excerpt`,
 | |
|   date: '2022-01-01',
 | |
|   slug: `post-${index + 1}`,
 | |
|   url: `post-${index + 1}`,
 | |
|   body: {
 | |
|     raw: `Post ${index + 1} body`,
 | |
|   },
 | |
| })) as Post[];
 | |
| 
 | |
| describe('searchPosts', () => {
 | |
|   it('returns the posts that best match the query', () => {
 | |
|     expect(searchPosts('Post 7', posts)[0].title).toBe('Post 7');
 | |
|     expect(searchPosts('tag4', posts)[0].title).toBe('Post 4');
 | |
|   });
 | |
| 
 | |
|   it('returns no posts if the query is empty', () => {
 | |
|     expect(searchPosts('', posts)).toHaveLength(0);
 | |
|   });
 | |
| });
 | |
| 
 | |
| describe('getTagsWithCount', () => {
 | |
|   it('returns the tags with their count', () => {
 | |
|     const tagsWithCount = getTagsWithCount(posts);
 | |
|     expect(tagsWithCount).toContainEqual(['tag', 10]);
 | |
|     expect(tagsWithCount).toContainEqual(['tag1', 1]);
 | |
|     expect(tagsWithCount).toContainEqual(['tag10', 1]);
 | |
|   });
 | |
| });
 | |
| 
 |