Skip to content

Commit fdae8da

Browse files
authored
Merge pull request #34 from CS428-CT/search-screen
Search screen
2 parents a2ef2d9 + fec834e commit fdae8da

File tree

13 files changed

+747
-245
lines changed

13 files changed

+747
-245
lines changed

__tests__/api/offerings-test.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ import MockAdapter from 'axios-mock-adapter'
33
import { getUserMetadata, setAuthToken, signOutUser } from '../../src/api/auth'
44
import { format } from '../../src/utils/string'
55
import {
6+
addStarredOferring,
67
getOfferingData,
78
getStarredOfferings,
89
getStarredOfferingsData,
10+
removeStarredOffering,
911
} from '../../src/api/offerings'
1012
import { HTTP_STATUS_CODES } from '../../src/api'
1113
import {
@@ -116,3 +118,42 @@ describe('Get starred offerings data', () => {
116118
expect(starredOfferings).toStrictEqual([])
117119
})
118120
})
121+
122+
describe('Modify starred offerings', () => {
123+
beforeEach(() => {
124+
mock.onGet(`${ENDPOINTS.USER_METADATA}`).reply(HTTP_STATUS_CODES.OK, METADATA_RESPONSE)
125+
mock.onPost(`${ENDPOINTS.POST_USER_METADATA}`).reply(HTTP_STATUS_CODES.OK)
126+
setAuthToken(MOCK_AUTH_TOKEN)
127+
})
128+
129+
afterEach(async () => {
130+
mock.reset()
131+
})
132+
133+
test('Add offering', async () => {
134+
const offeringToAdd = 'testOfferingId'
135+
136+
await getUserMetadata()
137+
const originalStarredOfferings = await getStarredOfferings()
138+
await addStarredOferring(offeringToAdd)
139+
const updatedStarredOfferings = await getStarredOfferings()
140+
141+
const expected = { [offeringToAdd]: 'starred', ...originalStarredOfferings }
142+
expect(updatedStarredOfferings).toStrictEqual(expected)
143+
})
144+
145+
test('Remove offering', async () => {
146+
await getUserMetadata()
147+
const originalStarredOfferings = await getStarredOfferings()
148+
149+
const toRemove = Object.keys(originalStarredOfferings)[0]
150+
151+
await removeStarredOffering(toRemove)
152+
const updatedStarredOfferings = await getStarredOfferings()
153+
154+
const expected = originalStarredOfferings
155+
delete expected[toRemove]
156+
157+
expect(updatedStarredOfferings).toStrictEqual(expected)
158+
})
159+
})

__tests__/frontend/HomeContainer-test.js

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ describe('Check universities rendering', () => {
5252
test('Check that components render', async () => {
5353
setUserData(USER_DATA)
5454

55-
const { getByTestId } = render(<Home starred={false} navigation={mockNavigator} />)
55+
const { getByTestId } = render(<Home navigation={mockNavigator} />)
5656

5757
const uniPicker = getByTestId('uniPicker')
5858
expect(uniPicker).not.toBe(null)
@@ -66,34 +66,17 @@ describe('Check universities rendering', () => {
6666

6767
test('Check that loading indicator renders', async () => {
6868
setUserData(USER_DATA)
69-
render(<Home starred={false} navigation={mockNavigator} />)
69+
render(<Home navigation={mockNavigator} />)
7070

7171
await waitFor(() => expect(mockHook).toHaveBeenCalled())
7272
})
7373

74-
test('Check (not starred) courses render', async () => {
75-
setUserData(USER_DATA)
76-
77-
const { queryByText, queryAllByA11yRole } = render(
78-
<Home starred={false} navigation={mockNavigator} />
79-
)
80-
const courses = await waitFor(() => queryAllByA11yRole('button'))
81-
expect(courses.length).not.toBe(0)
82-
83-
for (let i = 0; i < OFFERINGS_IN_LIST.length; i += 1) {
84-
const offering = OFFERINGS_IN_LIST[i]
85-
const termSection = `${offering.term.name} | ${offering.offering.sectionName}`
86-
const courseItem = await waitFor(() => queryByText(termSection))
87-
expect(courseItem).not.toBe(null)
88-
}
89-
})
90-
9174
test('Check (starred) courses render', async () => {
9275
setUserData(USER_DATA)
9376
const user = getCurrentAuthenticatedUser()
9477
user.metadata = STARRED_OFFERINGS_RESPONSE2
9578

96-
const { queryByText, queryAllByA11yRole } = render(<Home starred navigation={mockNavigator} />)
79+
const { queryByText, queryAllByA11yRole } = render(<Home navigation={mockNavigator} />)
9780
const courses = await waitFor(() => queryAllByA11yRole('button'))
9881
expect(courses.length).not.toBe(0)
9982

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import axios from 'axios'
2+
import React from 'react'
3+
import MockAdapter from 'axios-mock-adapter'
4+
import { render, waitFor } from '@testing-library/react-native'
5+
import { setUserData } from '../../src/api/auth'
6+
import { ENDPOINTS } from '../../src/api/api-requests'
7+
import { format } from '../../src/utils/string'
8+
import { HTTP_STATUS_CODES } from '../../src/api'
9+
import { UNIVERSITY_RESPONSE } from '../mock_responses/mock-university-response'
10+
import Home from '../../src/containers/HomeContainer/Home'
11+
import {
12+
OFFERINGS_RESPONSE_1,
13+
OFFERINGS_RESPONSE_2,
14+
USER_OFFERINGS_RESPONSE,
15+
} from '../mock_responses/mock-offerings-response'
16+
import { useLoadingIndicator } from '../../src/hooks/useLoadingIndicator'
17+
import SearchContainer from '../../src/containers/SearchContainer/SearchContainer'
18+
19+
jest.mock('../../src/hooks/useLoadingIndicator')
20+
const mock = new MockAdapter(axios)
21+
const mockHook = jest.fn()
22+
useLoadingIndicator.mockReturnValue(mockHook)
23+
24+
describe('Check universities rendering', () => {
25+
const USER_DATA = {
26+
authToken: 'A',
27+
universityId: '1001',
28+
userId: 'test user',
29+
emaildId: '[email protected]',
30+
}
31+
32+
const offeringId1 = 'ac5b1727-629c-443b-8c1a-cc1bd541af6a'
33+
const offeringId2 = '2c7a83cc-e2f3-493a-ae65-33f9c998e8ed'
34+
const mockNavigator = { push: jest.fn() }
35+
36+
beforeEach(() => {
37+
mock
38+
.onGet(`${ENDPOINTS.UNIVERSITIES}`)
39+
.reply(HTTP_STATUS_CODES.OK, UNIVERSITY_RESPONSE)
40+
.onGet(`${ENDPOINTS.OFFERINGBYSTUDENT}`)
41+
.reply(HTTP_STATUS_CODES.OK, USER_OFFERINGS_RESPONSE)
42+
.onGet(`${format(ENDPOINTS.OFFERING, offeringId1)}`)
43+
.reply(HTTP_STATUS_CODES.OK, OFFERINGS_RESPONSE_1)
44+
.onGet(`${format(ENDPOINTS.OFFERING, offeringId2)}`)
45+
.reply(HTTP_STATUS_CODES.OK, OFFERINGS_RESPONSE_2)
46+
})
47+
48+
afterEach(() => {
49+
mock.reset()
50+
})
51+
52+
test('Check that components render', async () => {
53+
setUserData(USER_DATA)
54+
55+
const { getByTestId } = render(<SearchContainer />)
56+
57+
const picker = getByTestId('searchBar')
58+
expect(picker).not.toBe(null)
59+
60+
const courseList = getByTestId('courseList')
61+
expect(courseList).not.toBe(null)
62+
})
63+
64+
test('Check that loading indicator renders', async () => {
65+
setUserData(USER_DATA)
66+
render(<Home navigation={mockNavigator} />)
67+
68+
await waitFor(() => expect(mockHook).toHaveBeenCalled())
69+
})
70+
})

0 commit comments

Comments
 (0)