Skip to content

Creating Hyperskill problems

Sergey edited this page May 25, 2023 · 10 revisions

About Hyperskill problems

On Hyperskill, testing with the hs-test library is used when testing stages of projects. However, it is possible to use this library to write standalone problems for various topics in the knowledge map. The specifics of creating such problems will be described below.

We'll continue from the end of the JVM languages initial setup page.
If you want to create a problem for a non-JVM language, you can start from non-JVM languages initial setup page.

Differences from projects

There are several key differences between projects on Hyperskill and problems on Hyperskill using the hs-test library:

  1. In the projects the initial template is only present in the first stage, while in the problems the initial template is present in every stage. This is because in projects, the user's solution moves from stage to stage, whereas problems can be solved by the user in any order and are actually independent of each other.
  2. In projects, only tests are hidden and all solution files must be visible to the user. In problems, part of the solution can be hidden and the user will only see a visible part of the solution to make changes in it. For a problem that can be solved in the Hyperskill web interface, it must have only one visible file (but it may contain more than one visible file, in this case it can be solved only in IDE).

You can create several problems in within single JetBrains Academy project.

Requirements

If you want your solution to be solvable in the web-interface, there are some requirements you have to follow:

  1. Tests and solution should not connect to the internet since they are being run inside an isolated environment. However, you can host the server on localhost and solution can connect to it.

  2. Tests and solution should not use additional libraries not included in the standard library. You can ask Hyperskill team for including some libraries to be installed inside an isolated environment.

    1. If tests are written in Java or Kotlin, you can use GSON library since hs-test uses it also.
    2. If you are writing a Spring Boot problem, you can use the following dependencies in your problem.
  3. Solution should have only 1 visible file, other solution files (if they exist) should be hidden since Hyperskill frontend only supports editing one file, not many.

Important: If the language of tests doesn't match with the language of the solution (consider that all JVM languages are the same language) then it will be tested on Hyperskill side even if it is opened locally in the IDE with the JetBrains Academy plugin. Therefore, all the requirements above (except point 3) should be considered even if you plan the problem to be solved in the IDE only.

So, to summarize:

  1. Tests written in Java/Koltin and solution in Java/Kotlin/Scala

    1. Consider all restrictions if you want the problem to be solved in web-interface and in IDE.
    2. No restrictions if you want the problem to be solved only in IDE.
  2. Tests written in Java/Kotlin and solution in Go/Bash/JavaScript/Python

    1. Consider all restrictions if you want the problem to be solved in web-interface and in IDE.
    2. Consider all restrictions (except point 3) if you want the problem to be solved only in IDE.

Example

Spring Boot problem, that can be solved both in the web interface and in the IDE. Don't be confused with Tests.java with gradle logo being shown in the root of the stage - it's actually build.gradle file on the disk, it's UI bug in JetBrains Academy plugin - EDU-4801. You can see that the first problem has only one visible file named src/task/SimpleController.java (it has black text color), while others are hidden (they have gray text color). You can find out how to set some files visible/invisible in the initial setup page.

Key observations:

  1. Try to leave only 1 visible file, so that users will be able to solve the problem in the web interface. It is quite important for the users.
  2. Try to leave all the necessary imports in place so that users won't struggle with them since they don't have code completion when they try to solve the problem in the web interface. But at the same time, don't hint the exact solution by showing exact imports. For example, in Java you can use star imports so that the user wouldn't be spoiled the solution and at the same time wouldn't have to type imports.
  3. You don't have to edit task.html in JetBrains Academy, it's better to edit it on Cogniterra. But be aware that you shouldn't edit problem description on Cogniterra while you edit tests in JetBrains Academy - you will end up erasing either description on Cogniterra or tests in JetBrains Academy. After you made some edits on Cogniterra, you need to redownload the lesson in JetBrains Academy or copy HTML description in Cogniterra and paste it to task.html in the same step in IDE.

If you want to write tests for the Spring Boot problem, use regular Testing Spring Boot instruction and Checking JSON instructions.