Challenge for Developers

Introduction

This is our programming challenge. Our goal is to know more about your programming skill level and experience, and then we can be on the same page during the interview.

What we will evaluate:

  • We want to evaluate your ability to deliver clean code with sufficient documentation for other developers to understand what you did and actively contribute to the project.

  • README.md is well written, with the instructions needed to run the application, etc. The code is well written, clean, and cohesive.

  • Implementation of the solution is working as expected.

  • There are well written automated tests (i.e., the unit and integration tests cover the expected behavior).

  • There is a linter/static code analysis.

  • There is an architecture approach.

  • Respect the separation of concerns principle.

Programming language

You can choose between Java, Kotlin, Swift, Objective-c, Dart or JavaScript.

How to share your code with us

We want you to experience how we work on a daily basis. That's why we ask you to use a standard git-flow as follows below.

Create a README.md file describing how to configure your project, containing the commands that must be executed to run the software and the tests.

If you have made use of any Linter, send the file together with the project. Open a single pull request to the master branch of the private repository that we have invited you to contribute with all the code of the exercise.

Exercise

Introduction

Joaquim has always been a child in love with Pokémon, from the time of the first seasons of the series. Today, at the age of 30, Joaquim loves the Pokémon GO game, but feels a terrible sadness for not having a Pokédex to get information about his beloved pets.

To end Joaquim's sadness, it is necessary to create a Pokédex for your Android smartphone. This Pokédex must contain a list of at least 151 Pokémon, ordered by favorites.

If possible, Joaquim would like to be able to sort and filter Pokémon by their types.

When clicking on a Pokémon in the list, Joaquim would like to see his photo and some information, including: name, number, stats, weight, type and at what level the Pokémon learns each move and within these details be able to choose his favorite pokemons.

Global requirements

  • List of at least 151 Pokémon;
  • Order by favorites Pokémon;
  • Filter by types;
  • Detail of Pokémon;
  • Like a Pokémon;
  • Unlike a Pokémon;

User stories

Story 1: List of

As a User
I want to list Pokémon
So I can scroll a list of Pokémon.

Story 2: Order by

As a User
I want to list Pokémon
So I can apply for my favorites.

Story 3: Filter by

As a User
I want to list Pokémon
So I can a sort and filter Pokémon by their types.

Story 4: Detail of

As a User
I want to list Pokémon
So I can open a Pokémon to navigate to details of it.

Story 5: Like.

As a User
I want to see a detail of Pokémon
So I can use the like button to favorite it.

Story 6: Unlike.

As a User
I want to see a detail of Pokémon
So I can press an unlike button to unfavorite a Pokémon.