Magento 2 Challenge

This is a challenge to prove your level of skill with Magento 2. For junior developers then we would expect you to achieve level 1. Senior developers should achieve level 3.

Your task is to do the following

  • Create two new product attributes called x-axis and y-axis
  • On the product page check to see if the product has values for both of these attributes
  • If so display the multiplication table in a tab using the values
  • If not, do not display the tab or grid
  • When the product is bought, a comment should be added to the order stating the values of the x and y axis, if they exist

The challenge is split into 3 levels. The first level is the very minimum. The following levels are extras.

To fully complete the challenge you should try to complete all the levels, but you can just submit the basics if you prefer.

Setup and Help

We can give you a container with Magento 2 already installed and configured within it, however you will need to submit the module as a stand alone git repo that can be installed in a different version of Magento 2.

Additionally, we are willing to help you if you get stuck on a particular part of the challenge. You will have access to one hour of a developers time, which can be taken in one of the following ways

  • Email questions to us. A developer will look over these and try and point you in the right direction
  • Come into the office and have a developer go over the problem with you

Before using this service please try and figure out the problem yourself, it will be noted if the answer is the first result in google after pasting the question you sent through.

Level One: Basic Requirements

This section described the minimum level you can work towards to pass this challenge

Module Setup

  • The module should run successfully on the latest version of Magento 2 currently 2.2.6
  • All code should be a module called EdmondsCommerce/MultiplicationTables

Attribute Management

  • The attributes will be created using an setup script
  • In the admin, the attributes should appear in their own tab on the product edit / create screen.
  • This tab should be called Multiplication Table
  • The values should be validated to ensure that they are either
    • Both set as positive integers
    • Neither are set
  • If neither of these conditions are met then an error message should be displayed, and the product is not saved

Product Page

  • If both attributes are present a tab will be displayed
  • This tab will be called Multiplication Table by default
  • When clicked, a multiplication table will be displayed using the values from the product
  • If the values are not present, or the values are invalid, then no tab will be displayed and no error will be displayed

Order Comment

  • This should be handled using an event listener
  • The comment should only be added once
  • It should say "$productName was ordered with these dimensions $xAxis by $yAxis"
  • If there are multiple products in the order with the attributes, then each product should appear on a new line within one comment

Level Two: Configuration and Documentation

To complete the challenge to a higher standard, you should implement these requirements

Module Configuration

  • Within the Configuration menu in the admin, there will be a tab called Edmonds Commerce
  • Within this there will be a section called Multiplication Tables
  • This section will contain these options
    • The ability to enable and disable the module. When disabled no multiplication tables should be displayed on the front end
    • The ability to change the title of the tab on the product page

Documentation

You should create, in markdown format as a README.md file in the root of your repository, a set of instructions that cover both developer and user level documentation.

  • How to install it
  • How to configure it
  • How to run the tests

Level Three: Quality Assurance

For an even higher standard of completion, you should implement these requirements

Testing

  • The code should have the major paths through it tested
  • This can be done using PHPUnit, Behat, or a different framework of your choice
  • The test should be able to be run with out manually editing the database / admin
  • They should confirm that the code is able to do what is asked when given the correct inputs
  • They should also confirm that the code is able to handle things going wrong gracefully

General