# Testing Guide

This guide covers both containerized testing (recommended) and manual testing approaches.

- **Unit Tests**: Test individual functions and components in isolation
- **Integration Tests**: Test API interactions with a real GitLab instance
- **End-to-End Tests**: Test complete workflows from client to server

## 🐳 Containerized Testing (Recommended)

The easiest way to run the full test suite is using Docker, which provides a consistent, isolated environment.

### Quick Start

Run the complete test suite (unit + integration + e2e):

```bash
yarn test:full
```

This command will:

- Start a GitLab CE instance using Docker Compose
- Wait for GitLab to be healthy and ready
- Set required environment variables
- Clean and build the project
- Run all test types sequentially (types, unit, integration, e2e)
- Keep GitLab running for additional testing (optional cleanup)

### Individual Test Types

You can also run specific test types individually:

```bash
# Type tests only
yarn test:types

# Unit tests only
yarn test:unit

# Integration tests only (requires GitLab running)
yarn test:integration

# End-to-end tests only
yarn test:e2e
```

### Manual GitLab Instance

To start just the GitLab instance for manual testing:

```bash
cd .docker && docker-compose up gitlab
```

GitLab will be available at `http://localhost:8080` with:

- Username: `root`
- Password: `gitbeaker`
- Personal Access Token: `superstrongpassword123`

## 🛠️ Local Testing (Alternative)

For contributors who prefer to test locally without Docker:

### Unit Tests

```bash
yarn test:unit
```

### Integration Tests

1. First, run GitLab in a docker container:

```bash
cd .docker && docker-compose up gitlab
```

2. Once GitLab is up on localhost:8080, set the environment variables:

```bash
export GITLAB_URL="http://localhost:8080"
export GITLAB_PERSONAL_ACCESS_TOKEN="superstrongpassword123"
```

3. Run the integration tests:

```bash
yarn test:integration
```

You can also define them inline:

```bash
GITLAB_URL='http://localhost:8080' GITLAB_PERSONAL_ACCESS_TOKEN='superstrongpassword123' yarn test:integration
```

### End-to-End Tests

```bash
yarn test:e2e
```

> **Note:** It may take about 3 minutes for GitLab to fully start up in the container

## 🔧 Troubleshooting

### Docker Issues

If you encounter Docker build issues:

```bash
# Clean Docker cache
docker system prune -f

# Rebuild containers
cd .docker && docker-compose build --no-cache
```

### SSL Certificate Issues

If you're behind a corporate firewall, you may need to configure Docker to trust your certificates or use alternative registries.

### GitLab Startup

GitLab requires significant resources and startup time. Ensure you have:

- At least 4GB of available RAM
- Docker Desktop running with sufficient memory allocation
- Wait 2-3 minutes for GitLab to be fully ready
