Skip to content

Commit dc2cc5e

Browse files
committed
CCM-10483: download consumer contracts
1 parent 0ca439f commit dc2cc5e

File tree

9 files changed

+62
-32
lines changed

9 files changed

+62
-32
lines changed

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@
4343
"start": "npm run start --workspace frontend",
4444
"test:contracts:clean": "npm --workspace=tests/contracts run pact:clean",
4545
"test:contracts:consumers": "npm --workspace=tests/contracts run test:consumers",
46-
"test:contracts:producer": "npm --workspace=tests/contracts run test:producer",
47-
"test:contracts:upload": "npm --workspace=tests/contracts run upload:consumer-pacts",
46+
"test:contracts:download": "npm --workspace=tests/contracts run pact:download",
47+
"test:contracts:provider": "npm --workspace=tests/contracts run test:provider",
48+
"test:contracts:upload": "npm --workspace=tests/contracts run pact:upload",
4849
"test:unit": "npm run test:unit --workspaces",
4950
"typecheck": "npm run typecheck --workspaces"
5051
},

tests/contracts/.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
*/pacts/
1+
**/pacts/

tests/contracts/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@
1111
"private": true,
1212
"scripts": {
1313
"pact:clean": "./scripts/clean.sh",
14-
"test:consumers": "jest consumer consumer-2",
15-
"test:producer": "cp -r consumer/pacts producer && cp -r consumer-2/pacts producer && jest producer/",
16-
"upload:consumer-pacts": "./scripts/upload-consumer-pacts.sh"
14+
"pact:download:consumer": "./scripts/download-pacts.sh",
15+
"pact:upload:consumer": "./scripts/upload-pacts.sh",
16+
"test:consumers": "jest consumer.pact.test.ts",
17+
"test:provider": "jest provider.pact.test.ts"
1718
},
1819
"version": "1.0.0"
1920
}

tests/contracts/scripts/clean.sh

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@ set -euo pipefail
33

44
script_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )";
55

6-
dirs=("consumer" "consumer-2" "producer")
6+
service_dirs=("auth" "core" "templates")
7+
pact_dirs=("consumer/pacts" "provider/pacts")
78

8-
for dir in "${dirs[@]}"; do
9-
pact_dir="$(realpath "${script_path}/../${dir}")/pacts"
10-
11-
echo "Removing pact files in $pact_dir..."
12-
13-
rm -rf $pact_dir
9+
for service_dir in "${service_dirs[@]}"; do
10+
for pact_dir in "${pact_dirs[@]}"; do
11+
target="${script_path}/../tests/${service_dir}/${pact_dir}"
12+
if [ -d "$target" ]; then
13+
target_dir="$(realpath "${target}")"
14+
echo "Removing pact files in ${target_dir} ..."
15+
rm -rf $target_dir
16+
fi
17+
done
1418
done
1519

16-
echo "All Pact files deleted successfully."
20+
echo "All local Pact files deleted successfully."
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
# Downloads all consumer-generated Pact contract files for a provider, for use in producer-side tests
5+
6+
script_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )";
7+
8+
provider="templates"
9+
10+
provider_dir=$(realpath "${script_path}/../tests/${provider}")
11+
12+
target_dir="${provider_dir}/provider/pacts"
13+
14+
echo "Downloading Pact files for provider: $provider"
15+
16+
mkdir -p "$target_dir"
17+
18+
aws s3 sync "s3://$PACT_BUCKET/pacts/$provider/" "$target_dir/" \
19+
--exclude "*" \
20+
--include "*.json"
21+
22+
echo "Pact files downloaded to $target_dir"
Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,33 @@
11
#!/bin/bash
22
set -euo pipefail
33

4+
# Uploads Pact contract files generated by running consumer Pact tests
5+
# These files should be downloaded by the provider for use in provider tests
6+
47
script_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )";
58

6-
consumer_dirs=("consumer" "consumer-2")
7-
pact_dir="pacts"
9+
consumer_service_dirs=("auth" "core")
10+
consumer_pact_dir="consumer/pacts"
811

9-
VERSION_TAG=${PACT_VERSION:-$(git rev-parse --abbrev-ref HEAD)}
12+
for consumer in "${consumer_service_dirs[@]}"; do
13+
source="${script_path}/../tests/${consumer}/${consumer_pact_dir}"
1014

11-
for consumer in "${consumer_dirs[@]}"; do
12-
consumer_pact_dir=$(realpath "${script_path}/../${consumer}/${pact_dir}")
15+
if [ -d "${source}" ]; then
16+
source_dir=$(realpath "${source}")
1317

14-
echo "Looking for pact files in $consumer_pact_dir..."
18+
echo "Looking for pact files in $source_dir..."
1519

16-
for file in "$consumer_pact_dir"/*.json; do
17-
if [[ -f "$file" ]]; then
18-
# Extract consumer and provider names from filename
19-
filename=$(basename "$file")
20-
provider=$(cat $file | jq -r ".provider.name")
20+
for file in "$source_dir"/*.json; do
21+
if [[ -f "$file" ]]; then
22+
filename=$(basename "$file")
23+
provider=$(cat $file | jq -r ".provider.name")
2124

22-
# Define S3 target path
23-
targetPath="pacts/$provider/$filename"
25+
targetPath="pacts/$provider/$filename"
2426

25-
echo "Uploading to s3://$PACT_BUCKET/$targetPath"
26-
# aws s3 cp "$file" "s3://$PACT_BUCKET/$targetPath" --acl bucket-owner-full-control
27-
fi
28-
done
27+
aws s3 cp "$file" "s3://$PACT_BUCKET/$targetPath"
28+
fi
29+
done
30+
fi
2931
done
3032

3133
echo "All Pact files uploaded successfully."

tests/contracts/consumer-2/template-deleted.pact.test.ts renamed to tests/contracts/tests/auth/consumer/template-deleted.consumer.pact.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ async function handleTemplateDeleted(event: unknown): Promise<void> {
2525

2626
describe('Pact Message Consumer - TemplateDeleted Event', () => {
2727
const messagePact = new MessageConsumerPact({
28-
consumer: 'consumer-2',
28+
consumer: 'auth',
2929
provider: 'templates',
3030
dir: path.resolve(__dirname, 'pacts'),
3131
pactfileWriteMode: 'update',

tests/contracts/consumer/template-deleted.pact.test.ts renamed to tests/contracts/tests/core/consumer/template-deleted.consumer.pact.test.ts

File renamed without changes.

tests/contracts/producer/template-deleted.pact.test.ts renamed to tests/contracts/tests/templates/provider/template-deleted.provider.pact.test.ts

File renamed without changes.

0 commit comments

Comments
 (0)