| import { describe, expect, test } from 'vitest' | |
| import { | |
| shouldShowRequestContentType, | |
| shouldShowResponseContentType, | |
| generateExampleOptionTexts, | |
| type CodeExample, | |
| } from '@/rest/lib/code-example-utils' | |
| describe('Request Content Type Logic', () => { | |
| test('detects request content types differ correctly', () => { | |
| const codeExamples: CodeExample[] = [ | |
| { | |
| description: 'Example', | |
| request: { contentType: 'text/plain' }, | |
| response: { contentType: 'text/html' }, | |
| }, | |
| { | |
| description: 'Rendering markdown', | |
| request: { contentType: 'text/x-markdown' }, | |
| response: { contentType: 'text/html' }, | |
| }, | |
| ] | |
| expect(shouldShowRequestContentType(codeExamples)).toBe(true) | |
| expect(shouldShowResponseContentType(codeExamples)).toBe(false) | |
| }) | |
| test('detects response content types differ correctly', () => { | |
| const codeExamples: CodeExample[] = [ | |
| { | |
| description: 'JSON example', | |
| request: { contentType: 'application/json' }, | |
| response: { contentType: 'application/json' }, | |
| }, | |
| { | |
| description: 'Another JSON example', | |
| request: { contentType: 'application/json' }, | |
| response: { contentType: 'text/html' }, | |
| }, | |
| ] | |
| expect(shouldShowRequestContentType(codeExamples)).toBe(false) | |
| expect(shouldShowResponseContentType(codeExamples)).toBe(true) | |
| }) | |
| test('generates correct options for markdown/raw scenario', () => { | |
| const markdownRawExamples: CodeExample[] = [ | |
| { | |
| description: 'Example', | |
| request: { | |
| contentType: 'text/plain', | |
| }, | |
| response: { | |
| contentType: 'text/html', | |
| }, | |
| }, | |
| { | |
| description: 'Rendering markdown', | |
| request: { | |
| contentType: 'text/x-markdown', | |
| }, | |
| response: { | |
| contentType: 'text/html', | |
| }, | |
| }, | |
| ] | |
| const options = generateExampleOptionTexts(markdownRawExamples) | |
| expect(options).toEqual(['Example (text/plain)', 'Rendering markdown (text/x-markdown)']) | |
| }) | |
| test('generates correct options when both request and response differ', () => { | |
| const mixedExamples: CodeExample[] = [ | |
| { | |
| description: 'JSON request', | |
| request: { | |
| contentType: 'application/json', | |
| }, | |
| response: { | |
| contentType: 'application/json', | |
| }, | |
| }, | |
| { | |
| description: 'Plain text request', | |
| request: { | |
| contentType: 'text/plain', | |
| }, | |
| response: { | |
| contentType: 'text/html', | |
| }, | |
| }, | |
| ] | |
| const options = generateExampleOptionTexts(mixedExamples) | |
| expect(options).toEqual([ | |
| 'JSON request (application/json → application/json)', | |
| 'Plain text request (text/plain → text/html)', | |
| ]) | |
| }) | |
| test('does not show content types when they are all the same', () => { | |
| const sameContentTypeExamples: CodeExample[] = [ | |
| { | |
| description: 'First example', | |
| request: { | |
| contentType: 'application/json', | |
| }, | |
| response: { | |
| contentType: 'application/json', | |
| }, | |
| }, | |
| { | |
| description: 'Second example', | |
| request: { | |
| contentType: 'application/json', | |
| }, | |
| response: { | |
| contentType: 'application/json', | |
| }, | |
| }, | |
| ] | |
| const options = generateExampleOptionTexts(sameContentTypeExamples) | |
| expect(options).toEqual(['First example', 'Second example']) | |
| }) | |
| test('handles single example correctly', () => { | |
| const singleExample: CodeExample[] = [ | |
| { | |
| description: 'Only example', | |
| request: { | |
| contentType: 'application/json', | |
| }, | |
| response: { | |
| contentType: 'application/json', | |
| }, | |
| }, | |
| ] | |
| expect(shouldShowRequestContentType(singleExample)).toBe(false) | |
| expect(shouldShowResponseContentType(singleExample)).toBe(false) | |
| const options = generateExampleOptionTexts(singleExample) | |
| expect(options).toEqual(['Only example']) | |
| }) | |
| }) | |