Skip to content

Commit 0bcd5b9

Browse files
committed
test: add tests for usage component
1 parent 5f1e08e commit 0bcd5b9

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed

packages/components/src/components/readme/Usage.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,18 @@ main();
3131
};
3232

3333
export function Usage({ clientName, clientFileName, language }) {
34+
if (!language || typeof language !== 'string') {
35+
throw new Error(`Invalid "language" parameter: must be a non-empty string, received ${language}`);
36+
}
37+
3438
const snippetFn = usageConfig[language];
39+
40+
if (!snippetFn) {
41+
throw new Error(
42+
`Invalid "language" parameter: unsupported value "${language}"`
43+
);
44+
}
45+
3546
const snippet = snippetFn(clientName, clientFileName);
3647

3748
return (
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import { render } from '@asyncapi/generator-react-sdk';
2+
import { Usage } from '../../src/components/readme/Usage';
3+
4+
describe('Testing of Usage component', () => {
5+
const supportedCases = [
6+
{
7+
language: 'python',
8+
clientFileName: 'my_client.py',
9+
},
10+
{
11+
language: 'javascript',
12+
clientFileName: 'myClient.js',
13+
},
14+
];
15+
16+
test.each(supportedCases)(
17+
'renders usage snippet for %s',
18+
({ language, clientFileName }) => {
19+
const result = render(
20+
<Usage
21+
clientName="MyClient"
22+
clientFileName={clientFileName}
23+
language={language}
24+
/>
25+
);
26+
27+
expect(result.trim()).toMatchSnapshot();
28+
}
29+
);
30+
31+
test('throws error for unsupported language', () => {
32+
expect(() =>
33+
render(
34+
<Usage
35+
clientName="MyClient"
36+
clientFileName="my_client.rb"
37+
language="ruby"
38+
/>
39+
)
40+
).toThrow(
41+
'Invalid "language" parameter: unsupported value "ruby"'
42+
);
43+
});
44+
45+
test('throws error when language is empty', () => {
46+
expect(() =>
47+
render(
48+
<Usage
49+
clientName="MyClient"
50+
clientFileName="my_client.py"
51+
language=""
52+
/>
53+
)
54+
).toThrow(
55+
'Invalid "language" parameter: must be a non-empty string, received '
56+
);
57+
});
58+
59+
test('throws error for wrong casing in language', () => {
60+
expect(() =>
61+
render(
62+
<Usage
63+
clientName="MyClient"
64+
clientFileName="my_client.py"
65+
language="Python"
66+
/>
67+
)
68+
).toThrow(
69+
'Invalid "language" parameter: unsupported value "Python"'
70+
);
71+
});
72+
73+
test('throws error when language is undefined', () => {
74+
expect(() =>
75+
render(
76+
<Usage
77+
clientName="MyClient"
78+
clientFileName="my_client.py"
79+
/>
80+
)
81+
).toThrow(
82+
'Invalid "language" parameter: must be a non-empty string, received undefined'
83+
);
84+
});
85+
});
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`Testing of Usage component renders usage snippet for { language: 'javascript', clientFileName: 'myClient.js' } 1`] = `
4+
"## Usage
5+
6+
\`\`\`javascript
7+
const MyClient = require('./myClient');
8+
const wsClient = new MyClient();
9+
10+
async function main() {
11+
try {
12+
await wsClient.connect();
13+
// use wsClient to send/receive messages
14+
await wsClient.close();
15+
} catch (error) {
16+
console.error('Failed to connect:', error);
17+
}
18+
}
19+
20+
main();
21+
\`\`\`"
22+
`;
23+
24+
exports[`Testing of Usage component renders usage snippet for { language: 'python', clientFileName: 'my_client.py' } 1`] = `
25+
"## Usage
26+
27+
\`\`\`python
28+
from my_client import MyClient
29+
30+
ws_client = MyClient()
31+
32+
async def main():
33+
await ws_client.connect()
34+
# use ws_client to send/receive messages
35+
await ws_client.close()
36+
\`\`\`"
37+
`;

0 commit comments

Comments
 (0)