{"id":16294806,"url":"https://github.com/finesse/currency-exchange-test-task","last_synced_at":"2026-04-04T20:33:38.306Z","repository":{"id":94077318,"uuid":"169847202","full_name":"Finesse/currency-exchange-test-task","owner":"Finesse","description":"A React/Redux test task for a financial organization","archived":false,"fork":false,"pushed_at":"2019-02-16T03:31:07.000Z","size":785,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-03T19:19:09.403Z","etag":null,"topics":["application","css-modules","enzyme","jest","react","reactjs","redux","redux-saga","test-task"],"latest_commit_sha":null,"homepage":"http://finesse.github.io/currency-exchange-test-task","language":"TypeScript","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/Finesse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2019-02-09T08:34:39.000Z","updated_at":"2019-02-16T03:28:37.000Z","dependencies_parsed_at":"2023-07-26T17:16:43.762Z","dependency_job_id":null,"html_url":"https://github.com/Finesse/currency-exchange-test-task","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Finesse/currency-exchange-test-task","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Finesse%2Fcurrency-exchange-test-task","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Finesse%2Fcurrency-exchange-test-task/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Finesse%2Fcurrency-exchange-test-task/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Finesse%2Fcurrency-exchange-test-task/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Finesse","download_url":"https://codeload.github.com/Finesse/currency-exchange-test-task/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Finesse%2Fcurrency-exchange-test-task/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31413269,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["application","css-modules","enzyme","jest","react","reactjs","redux","redux-saga","test-task"],"created_at":"2024-10-10T20:16:33.710Z","updated_at":"2026-04-04T20:33:38.282Z","avatar_url":"https://github.com/Finesse.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Currency exchange test task\n\n[![Build Status](https://travis-ci.org/Finesse/currency-exchange-test-task.svg?branch=master)](https://travis-ci.org/Finesse/currency-exchange-test-task)\n\nThe goal was to make a React application that simulates the currency exchange screen functionality of the given application:\nhttps://www.youtube.com/watch?v=c0zPSiKYipc\u0026t=29s\n\nThe task is described more detailed here:\n[task.pdf](task.pdf)\n\n## How to run the application\n\nJust open http://finesse.github.io/currency-exchange-test-task.\nThe application supports all the modern browsers (IE is not at the party).\n\nIf you want to run it locally:\n\n1. Download the repository\n2. Open a terminal and go to the project directory\n3. Run `npm install`\n4. Run `npm start`\n5. Open http://localhost:3000 in a browser\n\nIf you want to deploy it on a server, do steps 1-3 and then run `npm run build`.\nA `build` directory will be created in the project directory. Serve the content of the directory with your web server.\n\n## How to test\n\nRun `npm test` to perform the tests. Another checks are performed during running `npm start` and `npm run build`.\n\n## Architecture concepts\n\n- [Redux](http://redux.js.org) is used to manage the application state\n- [Redux-Saga](redux-saga.js.org) is used to manage asynchronous actions because it allows to write very testable code\n- The architecture may seem overcomplicated.\n    I chose it to show my skills and because it fits for complex applications (which financial applications usually are).\n- [Big.js](http://github.com/MikeMcl/big.js) is used for precise money calculations (e.g. for the famous `0.1 + 0.2`)\n- The \"beutiful\" React components are stored in `src/view/components`, the \"clever\" React components are stored in `src/view/containers`\n- Select field is a more convenient way than slider to pick from many currencies\n- The [FloatRates](http://floatrates.com) website is used to get exchange rates because it doesn't require an API key.\n    Not requiring an API key makes the application much easier to install.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffinesse%2Fcurrency-exchange-test-task","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffinesse%2Fcurrency-exchange-test-task","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffinesse%2Fcurrency-exchange-test-task/lists"}