· 6 years ago · Mar 25, 2019, 08:52 AM
1## Product Development Challenge
2
3**Note on time estimates:** Some of these tasks can be done concurrently such
4as consultation with UX/design or manual testing.
5
6**1. Assume that the basic infrastructure of the application already exists including a
7public-facing site that enables job-seekers to submit applications.**
8
9**2. When an admin user logs into HobNobJobs and navigates to My Jobs, show a list of job
10openings assigned to the admin.**
11
12###### Rails Back-End
13 * Create tests that sends a GET request to an endpoint that when given an
14 admin user's credentials, returns a list of jobs assigned to that admin
15 * I start with an outward request/feature test here to get an idea of
16 the big picture of what we need in this step of the criteria.
17 * These tests should include a positive cases where the jobs are returned,
18 and should also include tests to cover negative cases where some problem
19 with the request returned no jobs.
20 * **Time Estimate:** 1-1.5 hours
21 * Create a model and joins table called *admin_jobs* to store a many-to-many
22 relationship for **Jobs** and **Admins**
23 * I like the idea of the ability for a job to have many different
24 admins, all of whom may oversee a job. This could be useful for teams of
25 people involved in a hiring process without admins having to share their
26 personal credentials with the rest of the team.
27 * **Time Estimate:** 20-30 minutes
28 * Add these relationships to their given models:
29 * **Admin** has_many *admin_jobs*
30 * **Job** has_many *admin_jobs*
31 * **AdminJob** belongs_to *admin*, belongs_to *job*
32 * Create tests for these relationships in each respective model's tests.
33 * **Time Estimate:** 15-20 minutes
34 * Create route for an API endpoint to return the list of jobs assigned to an
35 admin
36 * **Time Estimate:** 5-10 minutes
37 * Create controller for the route above
38 * Ensure in this controller that the appropriate credentials are given with
39 the request so that sensitive information is not public
40 * **Time Estimate:** 1-1.5 hours
41 * Create a method in the controller that corresponds with the appropriate
42 controller action as given by the route made before
43 * If the credentials are valid, use ActiveRecord with the relationships
44 established before to retrieve the jobs for the given admin. Return these
45 jobs as JSON with a status code of 200. If admin has no jobs, return
46 a message that there are no jobs for this admin, even though the
47 credentials were accepted as valid.
48 * If the credentials are invalid, return an error
49 message detailing something was wrong with the given or not given
50 credentials.
51 * Create tests for this controller to ensure that the positive and negative
52 cases are covered.
53 * **Time Estimate:** 1-2 hours
54 * Manually test this new endpoint and add automated tests as needed to cover
55 any missed test cases
56 * **Time Estimate:** 4-5 days
57 * Refactor as needed or where appropriate, including bug fixes
58 * **Time Estimate:** 4-5 days
59
60###### Front-End
61 * Consult with the design and/or UX team to implement the structure and styling
62 of the 'My Jobs' component
63 * **Time Estimate:** 1-1.5 hours
64 * Create tests for this component
65 * Ensure that tests are written for a positive cases where the admin is
66 shown a list of jobs assigned to them (or on a valid request, display
67 there are no jobs if that admin has no jobs assigned to them), and
68 negative cases where something went wrong with the request.
69 * **Time Estimate:** 1-1.5 hours
70 * Create a component that will be called when an admin clicks on 'My Jobs'
71 * Implement the same authorization checks that exist when the admin logs
72 into the application. If the user is not authorized, display a 404 page.
73 * **Time Estimate:** 1 hour
74 * Create a request that the component can call to fetch the jobs for that admin
75 by sending the admin's credentials to the back-end route for this request.
76 * Assuming there is some existing infrastructure already for securing the
77 back end when using the application as an admin. For example, a JWT that
78 could be sent to the Rails back-end for authentication.
79 * **Time Estimate:** 1-1.5 hours
80 * Implement displaying this gathered data into the design and structure created
81 above
82 * **Time Estimate:** 1-1.5 hours
83 * Create a link for each displayed job that calls the component which will
84 display the applicants for that job
85 * **Time Estimate:** 15-30 minutes
86 * Manually test this component and add automated tests as needed when edge
87 cases are found
88 * **Time Estimate:** 4-5 days
89 * Refactor as needed or where appropriate, including bug fixes
90 * **Time Estimate:** 4-5 days
91
92**3. When the admin selects a job opening from the list, show a list of
93applicants to that particular job.**
94
95###### Rails Back-End
96 * Create tests that send a GET request to an endpoint that when given an valid
97 admin and job, returns a list of applicants with their details (such as
98 email, name, resume/cover letter, etc)
99 * Again, I start with a higher level feature/request test that will drive
100 the development of this part of the user story.
101 * These tests should include positive and negative cases and any potential
102 edge cases.
103 * **Time Estimate:** 1-1.5 hours
104 * Create the appropriate model relationships below:
105 * **Job** has_many *applicants*
106 * **Applicant** belongs_to *job*
107 * Add appropriate relationship tests to the above model's tests\
108 * **Time Estimate:** 15-30 minutes
109 * Create route and controller for an endpoint to return a list of applicants
110 and their details when given a specific job
111 * Ensure the same authentication practices are implemented as in Step 2 above,
112 to protect sensitive data
113 * **Time Estimate:** 1-1.5 hours
114 * Create the appropriate method and action to handle the request to return
115 a list of applicants and their details
116 * We will take advantage of the AR relationship made and use that to
117 query the database upon request.
118 * If the request is valid, return the content with a 200 status code.
119 * If the request is invalid, return an error.
120 * **Time Estimate:** 1-2 hours
121 * Create tests for the controller that covers both positive and negative cases
122 * **Time Estimate:** 1-1.5 hours
123 * Manually test this created endpoint and add any new automated tests as needed
124 * **Time Estimate:** 4-5 days
125 * Refactor as needed or where appropriate, including bug fixes
126 * **Time Estimate:** 4-5 days
127
128###### Front-End
129 * Consult with design team on design and layout of the UX for displaying
130 a list of applicants.
131 * **Time Estimate:** 1-1.5 hours
132 * Create tests for the Job applicants component
133 * **Time Estimate:** 1-1.5 hours
134 * Create the Job Applicants component
135 * This component will make a request to gather the applicants and their
136 details from the endpoint created above
137 * **Time Estimate:** 1.5-2 hours
138 * Implement displaying the requested data in the component's design
139 * **Time Estimate:** 45-60 minutes
140 * Manually test this component and add automated tests as needed
141 * **Time Estimate:** 4-5 days
142 * Refactor as needed or where appropriate, including bug fixes
143 * **Time Estimate:** 4-5 days
144
145**4. Applicants can be sorted by Name, Email, Status, and Date Submitted.**
146
147 * In the Job Applicant's component, we will add on-click events to the headers
148 for the applicant's table
149 * **Time Estimate:** 30-45 minutes
150 * Implement a method in the component that will sort the table based on which
151 header was clicked
152 * Each header will keep track of what state it was in before it was
153 clicked (either asc or desc).
154 * The state of this order will determine how the table is sorted
155 * Ensure that when sorting by date, sort by the date given in the requested
156 data, and not the human-friendly date that is displayed to the admin
157 user.
158 * **Time Estimate:** 1.5-2 hours
159 * Refactor as needed or where appropriate, including bug fixes
160 * **Time Estimate:** 4-5 days
161
162**5. Selecting an applicant shows an Applicant Detail Modal, which displays and allows for
163modification of the applicant information.**
164
165 * Consult with design on the layout and design of the Modal component, and the
166 Edit Candidate component it will contain
167 * **Time Estimate:** 1-1.5 hours
168 * Create a test for a generic Modal component that we can reuse again somewhere
169 else if needed, and create a test for the Edit Candidate component
170 * **Time Estimate:** 1.5-2 hours
171 * Implement the Modal component
172 * Ensure there is a way to close the modal, either by clicking outside the
173 modal, an 'X' or something similar, or both.
174 * **Time Estimate:** 1.5-2 hours
175 * Implement the Edit Candidate component
176 * In the Job Applicants component, create a button component that will open
177 the appropriate Edit Candidate modal when clicked
178 * **Time Estimate:** 45-60 minutes
179 * This component will have input and dropdown components, as well as a button
180 component to save any entered or changed data
181 * This component will also have its state be given by the Job Applicant
182 component which opened it, with the Applicant's details filled in.
183 * Manually test these components and add automated tests as needed
184 * **Time Estimate:** 4-5 days
185 * Refactor as needed or where appropriate, including bug fixes
186 * **Time Estimate:** 4-5 days
187
188**6. Setting the status of a candidate to "Declined" sends an email to the candidate notifying
189them.**
190
191###### Rails Back-End
192 * Create a test that sends a PATCH request to an endpoint that updates the
193 candidates status to 'Declined'
194 * **Time Estimate:** 1.5-2 hours
195 * Create an email template for the 'Declined' message
196 * **Time Estimate:** 30-60 minutes
197 * Create a test for this email template to ensure that the applicant's name
198 is properly interoplated, as well as any other information that could be
199 dynamically added to the email template.
200 * **Time Estimate:** 45-60 minutes
201 * Create a test for an update method for Applicant controller
202 * **Time Estimate:** 1-1.5 hours
203 * Add an update method to to the Applicant controller, that takes in
204 the given params and updates the model appropriately.
205 * **Time Estimate:** 30-60 minutes
206 * To keep controllers skinny, we will create a method in the Applicant model
207 that looks for a change to the model.
208 * We can use a callback in the Applicant model that will run after a status
209 is updated
210 * **Time Estimate:** 45-60 minutes
211 * Create a test for the new model callback method
212 * **Time Estimate:** 30-45 minutes
213 * This method that is ran by a callback will use ActionMailer to send the email
214 with the appropriate template for 'Declined' status.
215 * Manually test this new feature and endpoint and add automated tests as needed
216 * **Time Estimate:** 4-5 days
217 * Refactor as needed or where appropriate, including bug fixes
218 * **Time Estimate:** 4-5 days
219
220###### Front-End
221 * In the Edit Candidate modal we will implement a method that will send a PATCH
222 request to the back-end containing the user's ID, any authentication needed
223 for the endpoint, and the updated status.
224 * **Time Estimate:** 1.5-2 hours
225 * Add tests for this feature to test for positive and negative cases for sending
226 the PATCH request
227 * **Time Estimate:** 1-1.5 hours
228 * Ensure the modal closes after the request is sent
229 * Implement an alert of some kind to tell the admin that the email has been
230 sent to that applicant.
231 * **Time Estimate:** 30-60 minutes
232 * Manually test this updated Edit Candidate component and add any automated
233 tests as needed.
234 * **Time Estimate:** 4-5 days
235 * Refactor as needed or where appropriate, including bug fixes
236 * **Time Estimate:** 4-5 days
237
238**7. Setting the status of a candidate to "Interview Requested" sends an email requesting the
239candidate's availability.**
240
241###### Rails Back-End
242 * Create and test an email template for requesting an Interview and the
243 candidate's availability.
244 * **Time Estimate:** 30-60 minutes
245 * Implement the callback method in the Applicant model to handle when a
246 status is changed to 'Interview Requested'
247 * **Time Estimate:** 45-60 minutes
248 * Create a test for this new model callback method
249 * **Time Estimate:** 30-45 minutes
250 * With the implementation above in Step 6, ensure that this feature and
251 request mostly works the same as when setting the status to 'Declined',
252 sending the appropriate email by creating new tests
253 * **Time Estimate:** 45-60 minutes
254 * Manually test this new feature and add any automated tests if needed
255 * **Time Estimate:** 4-5 days
256 * Refactor any steps along the way as needed or where appropriate, including
257 bug fixes
258 * **Time Estimate:** 4-5 days
259
260###### Front-End
261 * Ensure the dropdown box for Status has 'Interview Requested' as an option
262 * Manually test this behavior and if needed, add any additional automated tests
263 * **Time Estimate:** 4-5 days
264 * Refactor if necessary
265 * **Time Estimate:** 4-5 days