* Copyright (c) 2024 Huawei Technologies Co., Ltd.
*
* This source code is licensed under the MIT license found in the
* LICENSE-MIT file in the root directory of this source tree.
*/
import { StyleSheet, Text, View } from 'react-native';
import { TestCase, TestSuite } from '@rnoh/testerino';
import React from 'react';
const WebSocketEcho = () => {
const [status, setStatus] = React.useState('Loading...');
const [data, setData] = React.useState<string>();
const runWebSockSession = () => {
var ws = new WebSocket('wss://ws.postman-echo.com/raw');
ws.onopen = () => {
setStatus('Connected');
ws.send('something');
};
ws.onmessage = e => {
setData(JSON.stringify(e));
setTimeout(() => {
setStatus('Closing...');
ws.close();
}, 3000);
};
ws.onerror = e => {
console.error(e.message);
setStatus(`Error ${e.message}`);
};
ws.onclose = e => {
console.log(e.code, e.reason);
setStatus(`Closed ${e.code} ${e.reason}`);
};
};
React.useEffect(() => {
runWebSockSession();
}, []);
return (
<View>
<Text style={styles.loadingText}>{status}</Text>
{data && <Text style={styles.movieDetails}>{data}</Text>}
</View>
);
};
export const NetworkingTest = () => {
const canFetch = async (url: string) => {
try {
const response = await fetch(url);
await response.json();
return true;
} catch (error) {
return false;
}
};
return (
<TestSuite name="Networking">
<TestCase
itShould="download data"
fn={async ({ expect }) => {
const response = await fetch('https://reactnative.dev/movies.json');
const result = await response.text();
const parsed = JSON.parse(result);
expect(parsed.title).to.be.eq('The Basics - Networking');
}}
/>
<TestCase
itShould="download and parse JSON data"
fn={async ({ expect }) => {
const response = await fetch('https://reactnative.dev/movies.json');
const result = await response.json();
expect(result.title).to.be.eq('The Basics - Networking');
}}
/>
<TestCase
itShould="download data to an ArrayBuffer"
fn={async ({ expect }) => {
const response = await fetch('https://reactnative.dev/movies.json');
const result = await response.arrayBuffer();
expect(result.byteLength).to.be.eq(458);
}}
/>
<TestCase
itShould="download data to a blob"
fn={async ({ expect }) => {
const response = await fetch('https://reactnative.dev/movies.json');
const result = await response.blob();
expect(result.size).to.be.eq(458);
}}
/>
<TestCase
itShould="fail on bad url"
fn={async ({ expect }) => {
const received = await canFetch(
'https://reactnative.dev/bad_url.json',
);
expect(received).to.be.false;
}}
/>
<TestCase itShould="connect to websocks">
<WebSocketEcho />
</TestCase>
</TestSuite>
);
};
const styles = StyleSheet.create({
movieDetails: {
height: 20,
width: '100%',
},
loadingText: {
fontSize: 20,
height: 40,
width: '100%',
},
});