{"id":15606379,"url":"https://github.com/paulfioravanti/survey_tool_elixir","last_synced_at":"2025-10-13T13:31:02.383Z","repository":{"id":145917436,"uuid":"99339937","full_name":"paulfioravanti/survey_tool_elixir","owner":"paulfioravanti","description":"Culture Amp's Survey Tool Back End Developer Coding Test","archived":true,"fork":false,"pushed_at":"2023-12-07T04:47:19.000Z","size":5041,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-30T12:38:14.534Z","etag":null,"topics":["coding-test","elixir"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paulfioravanti.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-08-04T12:16:02.000Z","updated_at":"2023-12-10T00:22:52.000Z","dependencies_parsed_at":"2023-12-07T05:39:38.418Z","dependency_job_id":null,"html_url":"https://github.com/paulfioravanti/survey_tool_elixir","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/paulfioravanti/survey_tool_elixir","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paulfioravanti%2Fsurvey_tool_elixir","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paulfioravanti%2Fsurvey_tool_elixir/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paulfioravanti%2Fsurvey_tool_elixir/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paulfioravanti%2Fsurvey_tool_elixir/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paulfioravanti","download_url":"https://codeload.github.com/paulfioravanti/survey_tool_elixir/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paulfioravanti%2Fsurvey_tool_elixir/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279015312,"owners_count":26085684,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["coding-test","elixir"],"created_at":"2024-10-03T04:22:12.064Z","updated_at":"2025-10-13T13:31:01.918Z","avatar_url":"https://github.com/paulfioravanti.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status][Build Status image]][Build Status url]\n\n# CSV Survey Tool Developer Coding Test\n\nAn [Elixir][] CLI application that parses survey data from CSV files, and\ndisplays the results.\n\n![Screenshot][screenshot url]\n\nI also wrote a version of this app in [Ruby][], which can be found\n[here][survey-tool-ruby]. There is also a sibling repo to this containing\nCulture Amp's front end coding test, which I wrote in [Elm][]. It can be found\n[here][survey-tool-elm].\n\nMy review of the coding tests can be found in the following blog post:\n\n- _[Coding Test Review: Culture Amp][]_\n\n## Setup\n\n```console\ngit clone https://github.com/paulfioravanti/survey_tool_elixir.git\ncd survey_tool_elixir\nmix deps.get\n```\n\n## Usage\n\nRun the application with the following command:\n\n```console\nbin/survey-tool -q questions.csv [-r responses.csv]\n```\n\nIf the survey responses CSV file is _not_ specified, it will attempt to be\ninferred.  For example, if the questions CSV file is named\n`path/to/questions.csv`, then the application will attempt to use\n`path/to/questions-responses.csv` for the responses file.\n\nOther options can be seen by running the help command:\n\n```console\nbin/survey-tool -h\n```\n\n## Development\n\n### Dependencies\n\n- Elixir 1.15.7 ([asdf-elixir pre-compiled version][]: 1.15.7-otp-26)\n- Erlang 26.1.2\n\n### Environment\n\nHeavy use of [`mix test.watch`][] was made during development to ensure code\nquality, so I highly recommend having the following commands running in other\nterminal windows:\n\n```console\nmix test.watch\niex -S mix\n```\n\nIf you are a [Tmuxinator][] user, you can find my config for this project\n[here][tmuxinator-config].\n\n## Tests\n\n[ExUnit][] was used for the tests, which can be run with the following command:\n\n```console\nmix test\n```\n\n## Coverage Report\n\nView the [ExCoveralls][] test coverage report:\n\n```console\nopen cover/excoveralls.html\n```\n\n## Application Documentation\n\nGenerate the [ExDoc][] documentation (if not already done by running the tests)\nand open them:\n\n```console\nmix docs\nopen doc/index.html\n```\n\n[asdf-elixir pre-compiled version]: https://github.com/asdf-vm/asdf-elixir#elixir-precompiled-versions\n[Build Status image]: https://github.com/paulfioravanti/survey_tool_elixir/actions/workflows/ci.yml/badge.svg\n[Build Status url]: https://github.com/paulfioravanti/survey_tool_elixir/actions/workflows/ci.yml\n[Coding Test Review: Culture Amp]: https://www.paulfioravanti.com/blog/coding-test-review-culture-amp/\n[Elixir]: https://github.com/elixir-lang/elixir\n[Elm]: https://elm-lang.org/\n[ExCoveralls]: https://github.com/parroty/excoveralls\n[ExDoc]: https://github.com/elixir-lang/ex_doc\n[ExUnit]: https://hexdocs.pm/ex_unit/ExUnit.html\n[`mix test.watch`]: https://github.com/lpil/mix-test.watch\n[Ruby]: https://github.com/ruby/ruby\n[screenshot url]: ./elixir-screenshot.jpg\n[survey-tool-elm]: https://github.com/paulfioravanti/survey_tool_elm\n[survey-tool-ruby]: https://github.com/paulfioravanti/survey_tool_ruby\n[Tmuxinator]: https://github.com/tmuxinator/tmuxinator\n[tmuxinator-config]: https://github.com/paulfioravanti/dotfiles/blob/master/tmuxinator/survey_tool_elixir.yml\n\n---\n\n# Requirements\n\n# Culture Amp's Developer Coding Test\n\nYour task is to build a CLI application to parse and display survey data from CSV files, and display the results.\n\n## Data Format\n\n### Survey Data\nIncluded in the folder example-data are three sample data files defining surveys:\n* survey-1.csv\n* survey-2.csv\n* survey-3.csv\n\nEach row represents a question in that survey with headers defining what question data is in each column.\n\n### Response Data\nAnd three sample files containing responses to the corresponding survey:\n* survey-1-responses.csv\n* survey-2-responses.csv\n* survey-3-responses.csv\n\nResponse columns are always in the following order:\n* Email\n* Employee Id\n* Submitted At Timestamp (if there is no submitted at timestamp, you can assume the user did not submit a survey)\n* Each column from the fourth onwards are responses to survey questions.\n* Answers to Rating Questions are always an integer between (and including) 1 and 5.\n* Blank answers represent not answered.\n* Answers to Single Select Questions can be any string.\n\n## The Application\n\nYour coding challenge is to build an application that allows the user to specify a survey file and a file for it's results. It should read them in and present a summary of the survey results. A command line application that takes a data file as input is sufficient.\n\nThe output should include:\n\n1. The participation percentage and total participant counts of the survey.\n- Any response with a 'submitted_at' date has submitted and is said to have participated in the survey.\n2. The average for each rating question\n- Results from unsubmitted surveys should not be considered in the output.\n\n## Other information\n\nPlease include a Readme with any additional information you would like to include. You may wish to use it to explain any design decisions.\n\nDespite this being a small command line app, please approach this as you would a production problem using whatever approach to coding and testing you feel appropriate. Successful candidates will be asked to extend their implementation in a pair programming session as a component of the interview, so consider extensibility.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaulfioravanti%2Fsurvey_tool_elixir","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaulfioravanti%2Fsurvey_tool_elixir","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaulfioravanti%2Fsurvey_tool_elixir/lists"}