jest.mock('../../../components/ContentView') import React from 'react' import renderer from 'react-test-renderer' import TestUtils from 'react-dom/test-utils' import { Request, Response, ErrorView } from '../../../components/FlowView/Messages' import { Provider } from 'react-redux' import { TFlow, TStore } from '../../ducks/tutils' import { updateEdit } from '../../../ducks/ui/flow' import { parseUrl } from '../../../flow/utils' import ContentView from '../../../components/ContentView' import ContentViewOptions from '../../../components/ContentView/ContentViewOptions' import Headers from '../../../components/FlowView/Headers' import ValueEditor from '../../../components/ValueEditor/ValueEditor' global.fetch = jest.fn() let tflow = new TFlow(), store = TStore() store.getState().ui.flow.modifiedFlow = false describe('Request Component', () => { afterEach(() => {store.clearActions()}) it('should render correctly', () => { let provider = renderer.create( ), tree = provider.toJSON() expect(tree).toMatchSnapshot() }) let provider = TestUtils.renderIntoDocument( ), valueEditors = TestUtils.scryRenderedComponentsWithType(provider, ValueEditor) it('should handle done on flow request method', () => { let valueEditor = valueEditors[0] valueEditor.props.onDone('foo') expect(store.getActions()).toEqual([updateEdit({ request: { method: 'foo' }})]) }) it('should handle done on flow request url', () => { let valueEditor = valueEditors[1], url = 'http://foo/bar' valueEditor.props.onDone(url) expect(store.getActions()).toEqual([updateEdit({ request: { path: '', ...parseUrl(url)}})]) }) it('should handle done on flow request http version', () => { let valueEditor = valueEditors[2] valueEditor.props.onDone('HTTP/9.9') expect(store.getActions()).toEqual([updateEdit({ request: { http_version: 'HTTP/9.9' }})]) }) it('should handle change on flow request header', () => { let headers = TestUtils.findRenderedComponentWithType(provider, Headers) headers.props.onChange('foo') expect(store.getActions()).toEqual([updateEdit({ request: { headers: 'foo' }})]) }) it('should handle change on flow request contentView', () => { let contentView = TestUtils.findRenderedComponentWithType(provider, ContentView) contentView.props.onContentChange('foo') expect(store.getActions()).toEqual([updateEdit({ request: { content: 'foo' }})]) }) it('should handle uploadContent on flow request ContentViewOptions', () => { let contentViewOptions = TestUtils.findRenderedComponentWithType(provider, ContentViewOptions) contentViewOptions.props.uploadContent('foo') expect(fetch).toBeCalled() fetch.mockClear() }) }) describe('Response Component', () => { afterEach(() => {store.clearActions()}) it('should render correctly', () => { let provider = renderer.create( ), tree = provider.toJSON() expect(tree).toMatchSnapshot() }) let provider = TestUtils.renderIntoDocument( ), valueEditors = TestUtils.scryRenderedComponentsWithType(provider, ValueEditor) it('should handle done on flow response http version', () => { let valueEditor = valueEditors[0] valueEditor.props.onDone('HTTP/9.9') expect(store.getActions()).toEqual([updateEdit({ response: { http_version: 'HTTP/9.9' }})]) }) it('should handle done on flow response status code', () => { let valueEditor = valueEditors[1] valueEditor.props.onDone('404') expect(store.getActions()).toEqual([updateEdit({ response: { code: parseInt('404') }})]) }) it('should handle done on flow response reason', () => { let valueEdiotr = valueEditors[2] valueEdiotr.props.onDone('foo') expect(store.getActions()).toEqual([updateEdit( { response: { msg: 'foo' }})]) }) it('should handle change on flow response headers', () => { let headers = TestUtils.findRenderedComponentWithType(provider, Headers) headers.props.onChange('foo') expect(store.getActions()).toEqual([updateEdit( { response: { headers: 'foo' }})]) }) it('should handle change on flow response ContentView', () => { let contentView = TestUtils.findRenderedComponentWithType(provider, ContentView) contentView.props.onContentChange('foo') expect(store.getActions()).toEqual([updateEdit( { response: { content: 'foo' }})]) }) it('should handle updateContent on flow response ContentViewOptions', () => { let contentViewOptions = TestUtils.findRenderedComponentWithType(provider, ContentViewOptions) contentViewOptions.props.uploadContent('foo') expect(fetch).toBeCalled() fetch.mockClear() }) }) describe('Error Component', () => { it('should render correctly', () => { let errorView = renderer.create(), tree = errorView.toJSON() expect(tree).toMatchSnapshot() }) })