diff --git a/__tests__/RBSheet.test.js b/__tests__/RBSheet.test.js
index 6b6d02e..ea59018 100644
--- a/__tests__/RBSheet.test.js
+++ b/__tests__/RBSheet.test.js
@@ -1,28 +1,104 @@
import React from 'react';
-import {render, act} from '@testing-library/react-native';
+import {
+ render,
+ act,
+ fireEvent,
+ waitFor,
+ cleanup,
+} from '@testing-library/react-native';
import RBSheet from '../src';
-describe('', () => {
+describe('React Native Raw Bottom Sheet ', () => {
let ref;
let getByTestId;
beforeEach(() => {
ref = React.createRef();
getByTestId = render().getByTestId;
- });
-
- it('should render correctly', () => {
- getByTestId = render().getByTestId;
-
act(() => {
ref.current.open();
});
+ });
+ afterEach(cleanup);
+
+ it('should render correctly', () => {
expect(getByTestId('Modal')).toBeTruthy();
expect(getByTestId('KeyboardAvoidingView')).toBeTruthy();
expect(getByTestId('TouchableOpacity')).toBeTruthy();
expect(getByTestId('AnimatedView')).toBeTruthy();
+ });
+
+ it('should render draggable correctly', () => {
+ getByTestId = render().getByTestId;
+ act(() => {
+ ref.current.open();
+ });
expect(getByTestId('DraggableView')).toBeTruthy();
expect(getByTestId('DraggableIcon')).toBeTruthy();
});
+
+ it('should handle open and close method', async () => {
+ expect(getByTestId('Modal')).toBeTruthy();
+ act(() => {
+ ref.current.close();
+ });
+ await waitFor(() =>
+ expect(() => getByTestId('Modal')).toThrow(
+ 'Unable to find an element with testID: Modal',
+ ),
+ );
+ });
+
+ it('should handle open and close callbacks', async () => {
+ const onOpen = jest.fn();
+ const onClose = jest.fn();
+ getByTestId = render(
+ ,
+ ).getByTestId;
+ act(() => {
+ ref.current.open();
+ });
+ await waitFor(() => expect(onOpen).toHaveBeenCalled());
+ act(() => {
+ ref.current.close();
+ });
+ await waitFor(() => expect(onClose).toHaveBeenCalled());
+ });
+
+ it('should not close on press mask', () => {
+ fireEvent.press(getByTestId('TouchableOpacity'));
+ expect(getByTestId('Modal')).toBeTruthy();
+ });
+
+ it('should close on press mask', async () => {
+ getByTestId = render().getByTestId;
+ act(() => {
+ ref.current.open();
+ });
+ fireEvent.press(getByTestId('TouchableOpacity'));
+ await waitFor(() =>
+ expect(() => getByTestId('Modal')).toThrow(
+ 'Unable to find an element with testID: Modal',
+ ),
+ );
+ });
+
+ it('should not close on press back', () => {
+ fireEvent(getByTestId('Modal'), 'requestClose');
+ expect(getByTestId('Modal')).toBeTruthy();
+ });
+
+ it('should close on press back', async () => {
+ getByTestId = render().getByTestId;
+ act(() => {
+ ref.current.open();
+ });
+ fireEvent(getByTestId('Modal'), 'requestClose');
+ await waitFor(() =>
+ expect(() => getByTestId('Modal')).toThrow(
+ 'Unable to find an element with testID: Modal',
+ ),
+ );
+ });
});