---
# System prepended metadata

title: Testspecifikation
tags: [Testning]

---

# Testspecifikation

[TOC]

## Teststrategi

### Beskrivning

Eftersom projektet främst kommer bestå utav en API kommer en stor mängd utav testing ske i form av enhetstester med verktyget Postman. Med verktyget kommer vi testa att API:ets olika endpoints skickar tillbaka förväntat data, HTTP status koder, samt bekräfta att felhantering fungerar när felaktig data skickas med till vårat API. 

Vi kommer även att skapa automatiska enhetstester med verktyget Jest för att testa våran kod. Testerna kommer att bekräfta att våran kod fungerar och ge oss mer trygghet i våran kod.

Där vi inte kommer att kunna skapa automatiska tester så kommer vi att utföra manuella tester samt köra exploratory testing.

### Verktyg

- [Postman - API-test](https://www.postman.com/)

### Tillvägagångssätt

1. Någon i gruppen blir tilldelad ett delkrav
2. Personen i fråga implementerar delkravet
3. Delkravet testas med hjälp av Postman (om det är en del av APIet)
4. Delkravet testas mot de tester som skapas
5. Refaktorera tills kravet är uppfyllt/testat

### Lokalisera buggar

- Automatisk testning
- Manuella tester
- Automatiska Postman-tester
- Kodgranskning

### Testansvarig

1. Testansvarig
2. Testförfattare
3. Kodgranskare

## Test Case Mall

### TCX.X Test_Case_Title

Use Case: UCX Use_Case_Title | optional ?

#### Description

[Should include: What are we testing and Why. Technical words should also be described?]

#### Precondition

[Here we should describe what needs to be prepared for the test to able to be run]
[Could be multiple steps]

#### Scenario

[Describe how we know that the scenario of the use case is tested]

#### Input

[Well described instructions that describe how to perform the test]
[Could be multiple steps]
[The user performing the test should not be able to misinterpret the input steps]

#### Output

[Description that describes how the output of the test should look when the test is successful or the test has “Passed”. Could be a text description or an image or a combination.]

## Test Case Example

### TC4.2 Answer To Life

Use Case: UC4.2 Finding out the answer to life

#### Description

Making sure that Google can give us the answer to life.  We are doing this to be sure that Google will provide the correct answer to life.

#### Precondition

The user has a stable internet connection
The user has opened a web browser

#### Scenario

The main scenario of UC4.2 is tested when we find out the correct answer to life.

#### Input

- By using your keyboard, enter the address www.google.com in the web browser’s address bar and press the enter key.
- By using your mouse or touchpad, select the search area that is located under the text that says “Google”
- By using your keyboard, enter the text “answer to life the universe and everything” in the selected search area and press the enter key.

#### Output

## Postman Test Case 1.

### PTC1.1 Register user success

Requirement: Req-1 User should be able to create an account with an email and password

#### Description

A registration of a user is being tested with a valid email and password.

#### Precondition

The service needs to be up and running.

#### Scenario

A user attempts to register by sending an unused email and a valid password.

#### Input

- Body contains a JSON object where "email" is set to "ravenraskar3@hotmail.com".
- Body contains a JSON object where "password" is set to "securepassword1".
- Run test.

#### Output

```javascript
201 Created
```

```json
{
    "message": "User created"
}
```

### PTC1.2 Register already existing email

Requirement: Req-1

#### Description

A registration of a user is being tested with an already existing email.

#### Precondition

The service needs to be up and running.

#### Scenario

A user attempts to register by sending a used email and a valid password.

#### Input

- Body contains a JSON object where "email" is set to "ravenraskar3@hotmail.com".
- Body contains a JSON object where "password" is set to "securepassword1".
- Run test.

#### Output

```javascript
409 Conflict
```

```json
{
    "name": "ConflictError",
    "status": 409,
    "message": {
        "detail": "This email is already registered.",
        "email": "ravenraskar3@hotmail.com"
    }
}
```

### PTC1.3 Register missing email

Requirement: Req-1

#### Description

A registration of a user is being tested without an email entered.

#### Precondition

The service needs to be up and running.

#### Scenario

A user attempts to register by sending a valid password but no email.

#### Input

- Body contains a JSON object where "password" is set to "securepassword1".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Please provide an email"
    }
}
```

### PTC1.4 Register missing password

Requirement: Req-1

#### Description

A registration of a user is being tested without a password.

#### Precondition

The service needs to be up and running.

#### Scenario

A user attempts to register by sending a valid email but no password.

#### Input

- Body contains a JSON object where "email" is set to "ravenraskar3@hotmail.com".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Please provide a password"
    }
}
```

### PTC1.5 Register invalid email

Requirement: Req-1

#### Description

A registration of a user is being tested with an invalid email.

#### Precondition

The service needs to be up and running.

#### Scenario

A user attempts to register by sending an invalid email and a valid password.

#### Input

- Body contains a JSON object where "email" is set to "ravenraskar3!hotmail.com".
- Body contains a JSON object where "password" is set to "securepassword1".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "User validation failed: email: ravenraskar3!hotmail.com is not a valid email address.",
        "email": "ravenraskar3!hotmail.com"
    }
}
```

### PTC1.6 Register too short password

Requirement: Req-1

#### Description

A registration of a user is being tested with a too short password.

#### Precondition

The service needs to be up and running.

#### Scenario

A user attempts to register by sending an unused email and a valid password.

#### Input

- Body contains a JSON object where "email" is set to "ravenraskar3@hotmail.com".
- Body contains a JSON object where "password" is set to "secure".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "User validation failed: password: The password must be of minimum length 10 characters."
    }
}
```

## Postman Test Case 3.

### PTC3.1 Login user success

Requirement: Req-3
#### Description

A user logs in successfully

#### Precondition

The service needs to be up and running.
The user must be registered.

#### Scenario

A user attempts to login by sending an valid email and a valid password.

#### Input

- Body contains a JSON object where "email" is set to "ravenraskar3@hotmail.com".
- Body contains a JSON object where "password" is set to "securepassword1".
- Run test.

#### Output

```javascript
200 OK
```

```json
{
    "token": "<exampleJWT>"
}
```
### PTC3.2 Login user wrong password

Requirement: Req-3
#### Description

A user submits the wrong password

#### Precondition

The service needs to be up and running.
The user must be registered.

#### Scenario

A user attempts to login by sending an valid email and an invalid password.

#### Input

- Body contains a JSON object where "email" is set to "ravenraskar3@hotmail.com".
- Body contains a JSON object where "password" is set to "on7iyuh23cr98pby23498i7oyb".
- Run test.

#### Output

```javascript
401 Unauthorized
```

```json
{
    "name": "UnauthorizedError",
    "status": 401,
    "message": {
        "detail": "Invalid email or password"
    }
}
```

### PTC3.3 Login user wrong email

Requirement: Req-3
#### Description

A user submits the wrong email

#### Precondition

The service needs to be up and running.
The user must be registered.

#### Scenario

A user attempts to login by sending an invalid email and a valid password.

#### Input

- Body contains a JSON object where "email" is set to "ravenraskar3!hotmail.com".
- Body contains a JSON object where "password" is set to "securepassword1".
- Run test.

#### Output

```javascript
401 Unauthorized
```

```json
{
    "name": "UnauthorizedError",
    "status": 401,
    "message": {
        "detail": "Invalid email or password"
    }
}
```

### PTC3.4 Login user missing email

Requirement: Req-3
#### Description

A user does not submit an email

#### Precondition

The service needs to be up and running.
The user must be registered.

#### Scenario

A user attempts to login by sending a valid password and no email.

#### Input

- Body contains a JSON object where "password" is set to "securepassword1".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Email needs to be provided"
    }
}
```
### PTC3.5 Login user missing password

Requirement: Req-3
#### Description

A user does not submit a password

#### Precondition

The service needs to be up and running.
The user must be registered.

#### Scenario

A user attempts to login by sending a valid email and no password.

#### Input

- Body contains a JSON object where "email" is set to "ravenraskar3@hotmail.com".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Password needs to be provided"
    }
}
```
### PTC3.6 Login user missing email and password

Requirement: Req-3
#### Description

A user does not submit an email or a password

#### Precondition

The service needs to be up and running.
The user must be registered.

#### Scenario

A user attempts to login by not sending either email or password.

#### Input

- Body contains a JSON object where "email" is set to "ravenraskar3@hotmail.com".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Email needs to be provided"
    }
}
```

### PTC3.7 Logged in user should be authenticated

Requirement: Req-3
#### Description

The correct user is authenticated by verifying the token

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

The user sends an a valid token to authenticate themselves

#### Input

- Request contains the JWT
- Run test.

#### Output

```javascript
200 OK
```

```json
{
    "authenticatedUser": "ravenraskar3@hotmail.com"
}
```

## Postman Test Case 5.

### PTC5.1 Add web page success

Requirement: Req-5

#### Description

Adding a web page with a valid address.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to add a web page with a valid address.

#### Input

- Body contains the JSON object "address" which is set to "http://hitta.se".
- - Body contains the JSON object "testInterval" which is set to "Daily".
- Run test.

#### Output

```javascript
201 Created
```

```json
{
    "page": {
        "_id": "<exampleID>",
        "address": "http://hitta.se/",
        "domain": "hitta.se",
        "path": "/",
        "createdAt": "2021-06-02T07:30:52.915Z"
    },
    "measureAt": "Daily"
}
```

### PTC5.2 Add already existing web page

Requirement: Req-5

#### Description

Adding an already existing web.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to add an already added web page.

#### Input

- Body contains the JSON object "address" which is set to "http://hitta.se".
- Body contains the JSON object "testInterval" which is set to "Daily".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Page already added"
    }
}
```

### PTC5.3 Add web page invalid address

Requirement: Req-5

#### Description

Trying to add a web page with an invalid address.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to add a web page with a invalid address.

#### Input

- Body contains the JSON object "address" which is set to "google.se".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "google.se is not a valid URL",
        "address": "google.se"
    }
}
```
### PTC5.4 Add web page invalid test interval

Requirement: Req-5

#### Description

Trying to add a web page with an invalid testInterval.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to add a web page with a invalid testInterval.

#### Input

- Body contains the JSON object "address" which is set to "http://hitta.se".
- - Body contains the JSON object "testInterval" which is set to "Baily".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Baily is not a valid testInterval.",
        "testInterval": "Baily"
    }
}
```
### PTC5.5 Add web page missing address

Requirement: Req-5

#### Description

Trying to add a web page without an address.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to add a web page without an address.

#### Input

- Body contains the JSON object "testInterval" which is set to "Daily".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Required parameter is missing.",
        "parameter": "address"
    }
}
```
### PTC5.6 Add web page missing testInterval

Requirement: Req-5

#### Description

Trying to add a web page without a testInterval.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to add a web page without a testInterval.

#### Input

- Body contains the JSON object "address" which is set to "http://hitta.se".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Required parameter is missing.",
        "parameter": "testInterval"
    }
}
```
## Postman Test Case 6

### PTC6.1 Update registered web page success

Requirement: REQ-6

#### Description

A user successfully updates a registered web page.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to update a registered web page by using the PUT /pages/:id endpoint with a new url.

#### Input

- PUT request containing the id of the registered web page in [PTC2.1 Add web page success](#PTC2.1-Add-web-page-success).
- Body contains a JSON object where "address" is set to "https://eniro.se".

```javascript
PUT pages/:id
```


#### Output

```javascript
204 No Content
```

### PTC6.2 Update registered web page missing address

Requirement: REQ-6

#### Description

A user fails at updating a registered web page.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to update a registered web page by using the PUT /pages/:id endpoint while missing the "address" in the body.

#### Input

- PUT request containing the id of the registered web page in [PTC2.1 Add web page success](#PTC2.1-Add-web-page-success).

```javascript
PUT /pages/:id
```

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Required parameter is missing.",
        "parameter": "address"
    }
}
```

### PTC6.3 Update registered web page bad id

Requirement: REQ-6

#### Description

A user failes at updating a registered web page.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to update a registered web page by using the PUT /pages/:id endpoint while using a invalid id.

#### Input

- PUT request where id is invalid.
- Body is empty

```javascript
PUT /pages/bad-id
```

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Required parameter is not a valid page ID.",
        "parameter": "id"
    }
}
```
### PTC6.4 Update registered web page invalid address

Requirement: REQ-6

#### Description

A user failes at updating a registered web page.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to update a registered web page by using the PUT /pages/:id endpoint while using a invalid address.

#### Input

- PUT request where id is invalid.
- Body contains the JSON object "address" which is set to "google.se".

```javascript
PUT /pages/:id
```

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "google.se is not a valid URL",
        "address": "google.se"
    }
}
```

## Postman Test Case 7.

### PTC7.1 Delete web page

Requirement: REQ-7

#### Description

A user removes an existing web page.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to remove a registered web page by using the DELETE /pages/:id endpoint with a valid id.

#### Input

- Query parameter contains a valid ID.

```javascript
DELETE /pages/:id
```

#### Output

```javascript
200 OK
```

```json
{
    "message": "Page deleted from user"
}
```
### PTC7.2 Delete web page invalid id

Requirement: REQ-7

#### Description

A user attempts to remove an existing web page.

#### Precondition

The service needs to be up and running.
The user needs to be logged in.

#### Scenario

A user attempts to remove a registered web page by using the DELETE /pages/:id endpoint with a invalid id.

#### Input

- Query parameter contains an invalid ID.

```javascript
DELETE /pages/:bad-id
```

#### Output

```javascript
403 Forbidden
```

```json
{
    "name": "ForbiddenError",
    "status": 403,
    "message": "Forbidden"
}
```

## Postman Test Case 8

### PTC8.1 Get user single domain paths

Requirement: Req-8

#### Description

A successful request to get a single domains every address.

#### Precondition

The service needs to be up and running.
User must be logged in.

#### Scenario

A user attempts to get a list of all of their specified domain and paths on that domain.

#### Input

- Query contains a parameter "domain" and is set to "hitta.se".
- Run test.

#### Output

```javascript
200 OK
```

```json
[
    {
        "page": {
            "_id": "<exampelID>",
            "address": "http://hitta.se/",
            "domain": "hitta.se",
            "path": "/",
            "createdAt": "2021-06-02T07:30:52.915Z"
        },
        "measureAt": "Daily"
    },
    ...
]
```

### PTC8.2 Find all user web pages

Requirement: Req-8

#### Description

A successful request to get the user's every address.

#### Precondition

The service needs to be up and running.
User must be logged in.

#### Scenario

A user attempts to get a list of all of their specified domain and paths on that domain.

#### Input

- Run test.

#### Output

```javascript
200 OK
```

```json
[
    {
        "page": {
            "_id": "<exampelID>",
            "address": "http://hitta.se/",
            "domain": "hitta.se",
            "path": "/",
            "createdAt": "2021-06-02T07:30:52.915Z"
        },
        "measureAt": "Daily"
    },
    ...
]
```

## Postman Test Case 11

### PTC11.1 Get measurement success

Requirement: Req-11

#### Description

A successful request to get a UX measurement on an address.

#### Precondition

The service needs to be up and running.
User must be logged in.

#### Scenario

A user tries to request a UX measurement on their address.

#### Input

- Body contains the JSON object "addresses" and is set to "["http://hitta.se"]".
- Run test.

#### Output

```javascript
200 OK
```

```json
[
    {
        "totalScore": <score>,
        "categories": [
            {
                "id": "first-contentful-paint",
                ...
            },
            {
                "id": "speed-index",
                ...
            },
            {
                "id": "largest-contentful-paint",
                ...
            },
            {
                "id": "interactive",
               ...
            },
            {
                "id": "total-blocking-time",
               ...
            },
            {
                "id": "cumulative-layout-shift",
               ...
            }
        ]
    }
]
```

### PTC11.2 Get measurement not in array

Requirement: Req-11

#### Description

An unsuccessful request to get a UX measurement on an address.

#### Precondition

The service needs to be up and running.
User must be logged in.

#### Scenario

A user tries to request a UX measurement on their address.

#### Input

- Body contains the JSON object "addresses" and is set to "http://hitta.se".
- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Invalid parameters, Adresses should be sent as an array"
    }
}
```

### PTC11.3 Get measurement empty body

Requirement: Req-11

#### Description

A unsuccessful request to get a UX measurement on an address.

#### Precondition

The service needs to be up and running.
User must be logged in.

#### Scenario

A user tries to request a UX measurement on their address.

#### Input

- Run test.

#### Output

```javascript
400 Bad Request
```

```json
{
    "name": "BadRequestError",
    "status": 400,
    "message": {
        "detail": "Invalid parameters, Adresses should be sent as an array"
    }
}
```

###### tags: `Testning`