Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.93 KB | None | 0 0
  1. ## Product Development Challenge
  2.  
  3. **Note on time estimates:** Some of these tasks can be done concurrently such
  4. as consultation with UX/design or manual testing.
  5.  
  6. **1. Assume that the basic infrastructure of the application already exists including a
  7. public-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
  10. openings 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
  93. applicants 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
  163. modification 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
  189. them.**
  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
  239. candidate'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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement