Skip to content

Commit

Permalink
Merge pull request #24 from MacPaw/feat/add-documentation
Browse files Browse the repository at this point in the history
feat: update Ci process add php 8.3 8.4
  • Loading branch information
Yozhef authored Oct 21, 2024
2 parents d247246 + 5417d31 commit c6e8ed6
Show file tree
Hide file tree
Showing 16 changed files with 368 additions and 97 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ jobs:
matrix:
php:
- '8.2'
- '8.3'
- '8.4'
coverage: ['none']
symfony-versions:
- '6.4.*'
Expand Down
151 changes: 57 additions & 94 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,102 +1,65 @@
Symfony Behat Redis Context
=================================

# Symfony Behat Redis Context
| Version | Build Status | Code Coverage |
|:---------:|:-------------:|:-----:|
| `main`| [![CI][main Build Status Image]][main Build Status] | [![Coverage Status][main Code Coverage Image]][main Code Coverage] |
| `develop`| [![CI][develop Build Status Image]][develop Build Status] | [![Coverage Status][develop Code Coverage Image]][develop Code Coverage] |

Installation
============

Step 1: Download the Bundle
----------------------------------
Open a command console, enter your project directory and execute:

### Applications that use Symfony Flex [in progress](https://github.com/MacPaw/BehatRedisContext/issues/2)

```console
$ composer require --dev macpaw/behat-redis-context
```

### Applications that don't use Symfony Flex

Open a command console, enter your project directory and execute the
following command to download the latest stable version of this bundle:

```console
$ composer require --dev macpaw/behat-redis-context
```

This command requires you to have Composer installed globally, as explained
in the [installation chapter](https://getcomposer.org/doc/00-intro.md)
of the Composer documentation.


Then, enable the bundle by adding it to the list of registered bundles
in the `app/AppKernel.php` file of your project:

```php
<?php
// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
BehatRedisContextBundle\BehatRedisContextBundle::class => ['test' => true],
);

// ...
}

// ...
}
```

Create configuration for behat redis context:

`config/packages/test/behat_redis_context.yaml `
```yaml
behat_redis_context:
dataFixturesPath: ""
```
Step 2: Change path to directory with your fixtures
----------------------------------
`config/packages/test/behat_redis_context.yaml `
```yaml
behat_redis_context:
dataFixturesPath: "your path"
```

Step 3: Change path to directory with your fixtures
----------------------------------
`config/services_test.yaml`
```yaml
Predis\ClientInterface: 'Your Redis Client'
```

Example if you use [Symfony Redis Bundle](https://github.com/symfony-bundles/redis-bundle):
```yaml
Predis\ClientInterface: '@SymfonyBundles\RedisBundle\Redis\ClientInterface'
```

Step 4: Configure Behat
=============
Go to `behat.yml`

```yaml
...
contexts:
- BehatRedisContext\Context\RedisContext
- BehatRedisContext\Context\RedisFixturesContext
...
```
Symfony Behat Redis Context is a package that integrates Redis operations with Behat for behavior-driven development (BDD). This context allows you to store, retrieve, and validate data in Redis as part of your Behat testing scenarios. It's useful when testing applications that depend on Redis for caching, session storage, or data management.

This documentation provides step-by-step guides for installing the package and utilizing each Redis-related step within Behat scenarios.

## How to Install Symfony Behat Redis Context

To install Symfony Behat Redis Context, follow these steps:

1. Add the package to your project using composer:
```bash
composer require --dev macpaw/behat-redis-context

For detailed steps and configuration, refer to the [Installation Steps](docs/install.md)

## RedisContext Documentation

Below are the available Redis operations that you can use in your Behat tests. Each step integrates seamlessly with Redis to ensure data is stored, retrieved, or validated as expected.

### Redis Step Definitions:

* [Check Any Value by Redis Key](docs/RedisContext/check-any-value-by-key.md)
Verifies if any value is stored in Redis under a specific key.

* [Check Array Value Stored in Redis](docs/RedisContext/check-array.md)
Ensures that the stored array or hash in Redis matches the expected structure.

* [Check if Key Exists in Redis](docs/RedisContext/check-key-exist.md)
Checks whether a specific key exists in Redis.

* [Check Serialized Value in Redis](docs/RedisContext/check-serialized-value.md)
Verifies that a serialized value stored in Redis matches the expected serialized value.

* [Check String Value in Redis](docs/RedisContext/check-value-in-redis.md)
Validates if a string value in Redis matches the expected value.

* [Clean Redis Database in Test](docs/RedisContext/clean-db.md)
Automatically flushes the Redis database before running a scenario to ensure a clean state.

* [Store Serialized Value in Redis](docs/RedisContext/store-seralized-value.md)
Serializes and stores a value in Redis with a given key.

* [Store String Value in Redis](docs/RedisContext/store-string-value.md)
Stores a simple string value in Redis under the specified key.

## RedisFixtureContext Documentation

Here you can find detailed documentation about using Redis fixtures in Behat:

1. **[How It Works](docs/RedisFixtures/how-works.md)**
Learn about the inner workings of the RedisFixtureContext and how it integrates with your Behat tests.

2. **[How to Load Fixture Data into Redis](docs/RedisFixtures/how-load-fixture-in-redis.md)**
A step-by-step guide on how to load predefined data fixtures into Redis using YAML files in Behat.

3. **[Handling Missing Fixture Files](docs/RedisFixtures/handling-missing-fixtures.md)**
What to do when a specified fixture file is missing and how to handle such errors in your tests.

[main Build Status]: https://github.com/macpaw/BehatRedisContext/actions?query=workflow%3ACI+branch%3Amain
[main Build Status Image]: https://github.com/macpaw/BehatRedisContext/workflows/CI/badge.svg?branch=main
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"name": "Yozhef Hisem",
"email": "[email protected]",
"homepage": "https://macpaw.com/",
"role": "Software Engineer"
"role": "Staff Software Engineer"
}
],
"license": "MIT",
Expand Down
10 changes: 10 additions & 0 deletions docs/RedisContext/check-any-value-by-key.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
### Check Any Value in Redis

#### Step Definition:

This step checks if any value exists in Redis under a specified key.

#### Gherkin Example:

```gherkin
When I see in redis any value by key "testKey"
16 changes: 16 additions & 0 deletions docs/RedisContext/check-array.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
### Check an Array in Redis

#### Step Definition:

This step checks if the data stored in Redis as a hash matches the expected JSON structure.

#### Gherkin Example:

```gherkin
Then I see in redis array by key "arrayKey":
"""
{
"key1": "value1",
"key2": "value2"
}
"""
10 changes: 10 additions & 0 deletions docs/RedisContext/check-key-exist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
### Check the Absence of a Value in Redis

#### Step Definition:

This step checks that no exists under a specific key in Redis.

#### Gherkin Example:

```gherkin
When I don't see in redis key "testKey"
10 changes: 10 additions & 0 deletions docs/RedisContext/check-serialized-value.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
### Check a Serialized Value in Redis

#### Step Definition:

This step checks if a serialized value in Redis matches the expected value. It unserializes the value before comparing.

#### Gherkin Example:

```gherkin
When I see in redis serialized value "testSerializedValue" by key "serializedKey"
10 changes: 10 additions & 0 deletions docs/RedisContext/check-value-in-redis.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
### Check a Value in Redis

#### Step Definition:

This step checks if a specific value exists in Redis under the specified key. If the value is missing or does not match, the step will throw an error.

#### Gherkin Example:

```gherkin
When I see in redis value "testValue" by key "testKey"
17 changes: 17 additions & 0 deletions docs/RedisContext/clean-db.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## Redis Database Cleanup

### Before Each Scenario

The Redis database is automatically flushed before each scenario using the `@BeforeScenario` hook. This ensures that each scenario starts with a clean database, preventing test pollution from previous scenarios.

#### Example Usage:

There is no specific Gherkin step required; this happens automatically before each test scenario.

### After Each Feature

After all scenarios in a feature are completed, the system performs garbage collection to free up memory.

#### Example Usage:

There is no specific Gherkin step required; this happens automatically after the last test in a feature.
10 changes: 10 additions & 0 deletions docs/RedisContext/store-seralized-value.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
### Save a Serialized Value to Redis

#### Step Definition:

This step serializes a value and saves it in Redis under the given key.

#### Gherkin Example:

```gherkin
When I save serialized value "testSerializedValue" to redis by "serializedKey"
10 changes: 10 additions & 0 deletions docs/RedisContext/store-string-value.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
### Save a String Value to Redis

#### Step Definition:

This step saves a string value in Redis with a specified key.

#### Gherkin Example:

```gherkin
When I save string value "testValue" to redis by "testKey"
7 changes: 7 additions & 0 deletions docs/RedisFixtures/handling-missing-fixtures.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Handling Missing Fixtures
If the specified fixture file is not found, an exception is thrown, indicating that the fixture is missing. Make sure the fixtures exist in the correct directory specified by data_fixtures_path.

Example Error Message:
```gherkin
The "orders" redis fixture not found.
```
Loading

0 comments on commit c6e8ed6

Please sign in to comment.