diff --git a/.codacy.yml b/.codacy.yml
new file mode 100644
index 000000000..a5756883b
--- /dev/null
+++ b/.codacy.yml
@@ -0,0 +1,5 @@
+---
+exclude_paths:
+ - "TransactionProcessor.Mobile.BusinessLogic.Tests/**"
+ - "TransactionProcessor.Mobile.UITests/**"
+ - "TransactionProcessor.Mobile.UiTestBackend/**"
diff --git a/.deepsource.toml b/.deepsource.toml
deleted file mode 100644
index c3730ebfb..000000000
--- a/.deepsource.toml
+++ /dev/null
@@ -1,17 +0,0 @@
-version = 1
-
-[[analyzers]]
-name = "csharp"
-enabled = true
-
-[[analyzers]]
-name = "docker"
-enabled = true
-
-[[analyzers]]
-name = "javascript"
-enabled = true
-
-[[analyzers]]
-name = "sql"
-enabled = true
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 375cf5f3e..7bc942bf1 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -5,8 +5,8 @@
-
-
+
+
@@ -24,15 +24,15 @@
-
+
-
-
-
-
+
+
+
+
@@ -41,10 +41,10 @@
-
-
-
-
+
+
+
+
diff --git a/TestCategoryLister/Program.cs b/TestCategoryLister/Program.cs
deleted file mode 100644
index 6643a10cb..000000000
--- a/TestCategoryLister/Program.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System;
-using System.Linq;
-using System.Reflection;
-using NUnit.Framework;
-
-class Program
-{
- static void Main(string[] args)
- {
- if (args.Length != 1)
- {
- Console.WriteLine("Usage: dotnet run ");
- return;
- }
-
- var path = args[0];
- var asm = Assembly.LoadFrom(path);
-
- foreach (var type in asm.GetTypes())
- {
- foreach (var method in type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static))
- {
- // Must be an [NUnit.Framework.Test] method
- var testAttr = method.GetCustomAttribute();
- if (testAttr is null)
- continue;
-
- // Collect [Category] from method and class
- var methodCategories = method.GetCustomAttributes().Select(a => a.Name);
- var classCategories = type.GetCustomAttributes().Select(a => a.Name);
-
- var allCategories = methodCategories.Concat(classCategories).Distinct().ToList();
-
- Console.WriteLine($"{type.FullName}.{method.Name} - Categories: {(allCategories.Count == 0 ? "None" : string.Join(", ", allCategories))}");
- }
- }
- }
-}
\ No newline at end of file
diff --git a/TestCategoryLister/TestCategoryLister.csproj b/TestCategoryLister/TestCategoryLister.csproj
deleted file mode 100644
index 72df9878a..000000000
--- a/TestCategoryLister/TestCategoryLister.csproj
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- Exe
- net10.0
-
-
-
-
-
\ No newline at end of file
diff --git a/TransactionProcessor.Mobile.sln b/TransactionProcessor.Mobile.sln
index 64936e2a8..5134d8701 100644
--- a/TransactionProcessor.Mobile.sln
+++ b/TransactionProcessor.Mobile.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 17
-VisualStudioVersion = 17.14.36203.30
+# Visual Studio Version 18
+VisualStudioVersion = 18.9.12120.119
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TransactionProcessor.Mobile", "TransactionProcessor.Mobile\TransactionProcessor.Mobile.csproj", "{6BE81803-4FDB-4900-8ED4-971A6AD4140D}"
EndProject
@@ -17,8 +17,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TransactionProcessor.Mobile
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TransactionProcessor.Mobile.UiTestBackend", "TransactionProcessor.Mobile.UiTestBackend\TransactionProcessor.Mobile.UiTestBackend.csproj", "{B7AB20D4-69B2-4C8A-9E4A-00D47C4869F4}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestCategoryLister", "TestCategoryLister\TestCategoryLister.csproj", "{A9557544-11B0-4718-A52D-8D513C9DD619}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -47,10 +45,6 @@ Global
{B7AB20D4-69B2-4C8A-9E4A-00D47C4869F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B7AB20D4-69B2-4C8A-9E4A-00D47C4869F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B7AB20D4-69B2-4C8A-9E4A-00D47C4869F4}.Release|Any CPU.Build.0 = Release|Any CPU
- {A9557544-11B0-4718-A52D-8D513C9DD619}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A9557544-11B0-4718-A52D-8D513C9DD619}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A9557544-11B0-4718-A52D-8D513C9DD619}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A9557544-11B0-4718-A52D-8D513C9DD619}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -61,7 +55,6 @@ Global
{327D1FDB-E953-4501-9DED-193EF75148E1} = {7AB22349-8BB9-41D3-A40F-268DFC30FD0C}
{E892CDC5-7DDF-4A0A-B8DB-AAC2DE758E56} = {7AB22349-8BB9-41D3-A40F-268DFC30FD0C}
{B7AB20D4-69B2-4C8A-9E4A-00D47C4869F4} = {7AB22349-8BB9-41D3-A40F-268DFC30FD0C}
- {A9557544-11B0-4718-A52D-8D513C9DD619} = {7AB22349-8BB9-41D3-A40F-268DFC30FD0C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4A92260C-922A-4553-A4DE-94C3BE3BA20F}
diff --git a/archive/.github/release-drafter.yml b/archive/.github/release-drafter.yml
deleted file mode 100644
index 62aef7361..000000000
--- a/archive/.github/release-drafter.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-categories:
- - title: '🚀 Features'
- labels:
- - 'feature'
- - title: '🐛 Bug Fixes'
- labels:
- - 'bug'
- - title: '🧰 Maintenance'
- label: 'maintenance'
-change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
-template: |
- ## Changes
- $CHANGES
diff --git a/archive/.github/workflows/android_e2e_tests.yml b/archive/.github/workflows/android_e2e_tests.yml
deleted file mode 100644
index 6b37ca648..000000000
--- a/archive/.github/workflows/android_e2e_tests.yml
+++ /dev/null
@@ -1,177 +0,0 @@
-name: Build and Run Android End to End Tests
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- end_to_end_tests:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Set up .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '8.0.x'
-
- - name: Set up JDK
- uses: actions/setup-java@v3
- with:
- distribution: 'temurin'
- java-version: '17'
-
- - name: Enable KVM group perms
- run: |
- echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
- sudo udevadm control --reload-rules
- sudo udevadm trigger --name-match=kvm
-
- - name: Install KVM and Android SDK (x86)
- run: |
- # Set up environment variables
- export ANDROID_SDK_ROOT=$HOME/android-sdk
- export ANDROID_HOME=$ANDROID_SDK_ROOT
- export PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH
-
- # Create necessary directories
- mkdir -p $ANDROID_SDK_ROOT/cmdline-tools
-
- # Download and install command-line tools
- wget -q https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip
- unzip -q commandlinetools-linux-*.zip -d $ANDROID_SDK_ROOT/cmdline-tools
- mv $ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools $ANDROID_SDK_ROOT/cmdline-tools/latest
- chmod +x $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager
-
- # Accept licenses and install required components
- yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
- # Install Android API level 34 and necessary system images
- $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-34" "system-images;android-34;google_apis;x86_64"
-
- # Export paths for future steps
- echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
- echo "ANDROID_HOME=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
- echo "PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH" >> $GITHUB_ENV
-
- - name: Cache Emulator System Image (x86)
- uses: actions/cache@v3
- with:
- path: ~/.android/avd
- key: android-emulator-x86-${{ runner.os }}-android-34
-
- - name: Create Android Emulator (x86)
- run: |
- echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-34;google_apis;x86_64" --device "pixel_4"
-
- - name: List AVDs
- run: avdmanager list avd
-
- - name: Start Emulator
- run: |
- echo "Starting emulator..."
-
- export ANDROID_AVD_HOME=$HOME/.config/.android/avd
-
- nohup $ANDROID_HOME/emulator/emulator -avd test_emulator -no-window -no-audio -no-snapshot -gpu swiftshader_indirect -verbose > emulator.log 2>&1 &
-
- echo "Waiting for emulator process to start..."
- sleep 10 # Allow time for initialization
-
- echo "Checking if emulator process is running..."
- ps aux | grep emulator
-
- echo "Checking ADB devices..."
- adb devices
-
- - name: Restart ADB
- run: |
- adb kill-server
- adb start-server
- adb devices
-
- - name: Wait for Emulator to Boot (Timeout 10 min with Debug)
- run: |
- # Start waiting for the emulator
- echo "Waiting for emulator to boot..."
-
- # Check the list of devices connected (debugging)
- adb wait-for-device
-
- # Wait for emulator boot completion
- timeout 600 bash -c '
- while true; do
- # Show the current list of devices (debugging)
- adb devices
-
- # Check if the emulator is booting by checking the boot status
- BOOT_COMPLETED=$(adb shell getprop sys.boot_completed 2>/dev/null)
- echo "Boot status: $BOOT_COMPLETED"
-
- # If boot is completed, break the loop
- if [ "$BOOT_COMPLETED" == "1" ]; then
- echo "Emulator boot completed!"
- break
- fi
-
- # If boot is not completed, keep waiting
- echo "Emulator still booting, waiting..."
- sleep 5
- done
- '
-
- - name: Install Android Build Tools
- run: |
- echo "Installing Android Build Tools..."
- sdkmanager "build-tools;34.0.0" # Updated to use Android 34 build tools
- sdkmanager --update
-
- - name: Install MAUI workloads
- run: |
- dotnet workload install maui-android
-
- - name: Install Appium and Drivers
- run: |
- sudo npm install -g appium
- appium driver install uiautomator2
-
- - name: Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- - name: Set up Docker (Ubuntu)
- if: runner.os == 'Linux'
- run: |
- # Check Docker version to ensure it's installed properly
- docker --version
- docker info
-
- # Allow current user to access Docker without sudo (optional, for convenience)
- sudo usermod -aG docker $USER
-
- # Restart Docker service to apply changes
- sudo systemctl restart docker
-
- - name: Restore MAUI App for Android
- run: dotnet restore TransactionMobile.Maui.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- - name: Build Code
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-android -c Release --no-restore
-
- - name: Run Android Navigation Tests
- run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter "(Category=PRTest)&(Category=Android)" --no-restore
-
- - name: Upload Logs on Failure
- if: failure() # Runs only if a previous step fails
- uses: actions/upload-artifact@v4
- with:
- name: android-e2e_tests
- path: /home/txnproc/trace/
-
- - name: Upload Appium Logs on Failure
- if: failure()
- uses: actions/upload-artifact@v4
- with:
- name: android-e2e_tests_appium
- path: appium.log
\ No newline at end of file
diff --git a/archive/.github/workflows/android_navigation_tests.yml b/archive/.github/workflows/android_navigation_tests.yml
deleted file mode 100644
index 15879cd05..000000000
--- a/archive/.github/workflows/android_navigation_tests.yml
+++ /dev/null
@@ -1,307 +0,0 @@
-name: Build and Run Android Navigation Tests
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- software_navigation_tests:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Set up .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '8.0.x'
-
- - name: Set up JDK
- uses: actions/setup-java@v3
- with:
- distribution: 'temurin'
- java-version: '17'
-
- - name: Enable KVM group perms
- run: |
- echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
- sudo udevadm control --reload-rules
- sudo udevadm trigger --name-match=kvm
-
- - name: Install KVM and Android SDK (x86)
- run: |
- # Set up environment variables
- export ANDROID_SDK_ROOT=$HOME/android-sdk
- export ANDROID_HOME=$ANDROID_SDK_ROOT
- export PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH
-
- # Create necessary directories
- mkdir -p $ANDROID_SDK_ROOT/cmdline-tools
-
- # Download and install command-line tools
- wget -q https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip
- unzip -q commandlinetools-linux-*.zip -d $ANDROID_SDK_ROOT/cmdline-tools
- mv $ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools $ANDROID_SDK_ROOT/cmdline-tools/latest
- chmod +x $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager
-
- # Accept licenses and install required components
- yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
- # Install Android API level 34 and necessary system images
- $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-34" "system-images;android-34;google_apis;x86_64"
-
- # Export paths for future steps
- echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
- echo "ANDROID_HOME=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
- echo "PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH" >> $GITHUB_ENV
-
- - name: Cache Emulator System Image (x86)
- uses: actions/cache@v3
- with:
- path: ~/.android/avd
- key: android-emulator-x86-${{ runner.os }}-android-34
-
- - name: Create Android Emulator (x86)
- run: |
- echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-34;google_apis;x86_64" --device "pixel_4"
-
- - name: List AVDs
- run: avdmanager list avd
-
- - name: Start Emulator
- run: |
- echo "Starting emulator..."
-
- export ANDROID_AVD_HOME=$HOME/.config/.android/avd
-
- nohup $ANDROID_HOME/emulator/emulator -avd test_emulator -no-window -no-audio -no-snapshot -gpu swiftshader_indirect -verbose > emulator.log 2>&1 &
-
- echo "Waiting for emulator process to start..."
- sleep 10 # Allow time for initialization
-
- echo "Checking if emulator process is running..."
- ps aux | grep emulator
-
- echo "Checking ADB devices..."
- adb devices
-
- - name: Restart ADB
- run: |
- adb kill-server
- adb start-server
- adb devices
-
- - name: Wait for Emulator to Boot (Timeout 10 min with Debug)
- run: |
- # Start waiting for the emulator
- echo "Waiting for emulator to boot..."
-
- # Check the list of devices connected (debugging)
- adb wait-for-device
-
- # Wait for emulator boot completion
- timeout 600 bash -c '
- while true; do
- # Show the current list of devices (debugging)
- adb devices
-
- # Check if the emulator is booting by checking the boot status
- BOOT_COMPLETED=$(adb shell getprop sys.boot_completed 2>/dev/null)
- echo "Boot status: $BOOT_COMPLETED"
-
- # If boot is completed, break the loop
- if [ "$BOOT_COMPLETED" == "1" ]; then
- echo "Emulator boot completed!"
- break
- fi
-
- # If boot is not completed, keep waiting
- echo "Emulator still booting, waiting..."
- sleep 5
- done
- '
-
- - name: Install Android Build Tools
- run: |
- echo "Installing Android Build Tools..."
- sdkmanager "build-tools;34.0.0" # Updated to use Android 34 build tools
- sdkmanager --update
-
- - name: Install MAUI workloads
- run: |
- dotnet workload install maui-android
-
- - name: Install Appium and Drivers
- run: |
- sudo npm install -g appium
- appium driver install uiautomator2
-
- - name: Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- - name: Restore MAUI App for Android
- run: dotnet restore TransactionMobile.Maui.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- - name: Build Code
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-android -c Release --no-restore
-
- - name: Run Android Navigation Tests
- run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter "(Category=PRNavTest)&(Category=Android)" --no-restore
-
- - name: Upload Appium Logs on Failure
- if: failure()
- uses: actions/upload-artifact@v4
- with:
- name: android-software_navigation_tests_appium
- path: appium.log
-
- hardware_navigation_tests:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Set up .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '8.0.x'
-
- - name: Set up JDK
- uses: actions/setup-java@v3
- with:
- distribution: 'temurin'
- java-version: '17'
-
- - name: Enable KVM group perms
- run: |
- echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
- sudo udevadm control --reload-rules
- sudo udevadm trigger --name-match=kvm
-
- - name: Install KVM and Android SDK (x86)
- run: |
- # Set up environment variables
- export ANDROID_SDK_ROOT=$HOME/android-sdk
- export ANDROID_HOME=$ANDROID_SDK_ROOT
- export PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH
-
- # Create necessary directories
- mkdir -p $ANDROID_SDK_ROOT/cmdline-tools
-
- # Download and install command-line tools
- wget -q https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip
- unzip -q commandlinetools-linux-*.zip -d $ANDROID_SDK_ROOT/cmdline-tools
- mv $ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools $ANDROID_SDK_ROOT/cmdline-tools/latest
- chmod +x $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager
-
- # Accept licenses and install required components
- yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
- # Install Android API level 34 and necessary system images
- $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-34" "system-images;android-34;google_apis;x86_64"
-
- # Export paths for future steps
- echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
- echo "ANDROID_HOME=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
- echo "PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH" >> $GITHUB_ENV
-
- - name: Cache Emulator System Image (x86)
- uses: actions/cache@v3
- with:
- path: ~/.android/avd
- key: android-emulator-x86-${{ runner.os }}-android-34
-
- - name: Create Android Emulator (x86)
- run: |
- echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-34;google_apis;x86_64" --device "pixel_4"
-
- - name: List AVDs
- run: avdmanager list avd
-
- - name: Start Emulator
- run: |
- echo "Starting emulator..."
-
- export ANDROID_AVD_HOME=$HOME/.config/.android/avd
-
- nohup $ANDROID_HOME/emulator/emulator -avd test_emulator -no-window -no-audio -no-snapshot -gpu swiftshader_indirect -verbose > emulator.log 2>&1 &
-
- echo "Waiting for emulator process to start..."
- sleep 10 # Allow time for initialization
-
- echo "Checking if emulator process is running..."
- ps aux | grep emulator
-
- echo "Checking ADB devices..."
- adb devices
-
- - name: Restart ADB
- run: |
- adb kill-server
- adb start-server
- adb devices
-
- - name: Wait for Emulator to Boot (Timeout 10 min with Debug)
- run: |
- # Start waiting for the emulator
- echo "Waiting for emulator to boot..."
-
- # Check the list of devices connected (debugging)
- adb wait-for-device
-
- # Wait for emulator boot completion
- timeout 600 bash -c '
- while true; do
- # Show the current list of devices (debugging)
- adb devices
-
- # Check if the emulator is booting by checking the boot status
- BOOT_COMPLETED=$(adb shell getprop sys.boot_completed 2>/dev/null)
- echo "Boot status: $BOOT_COMPLETED"
-
- # If boot is completed, break the loop
- if [ "$BOOT_COMPLETED" == "1" ]; then
- echo "Emulator boot completed!"
- break
- fi
-
- # If boot is not completed, keep waiting
- echo "Emulator still booting, waiting..."
- sleep 5
- done
- '
-
- - name: Install Android Build Tools
- run: |
- echo "Installing Android Build Tools..."
- sdkmanager "build-tools;34.0.0" # Updated to use Android 34 build tools
- sdkmanager --update
-
- - name: Install MAUI workloads
- run: |
- dotnet workload install maui-android
-
- - name: Install Appium and Drivers
- run: |
- sudo npm install -g appium
- appium driver install uiautomator2
-
- - name: Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- - name: Restore MAUI App for Android
- run: dotnet restore TransactionMobile.Maui.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- - name: Build Code
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-android -c Release --no-restore
-
- - name: Run Android Navigation Tests
- run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter "(Category=PRHWNavTest)&(Category=Android)" --no-restore
-
- - name: Upload Appium Logs on Failure
- if: failure()
- uses: actions/upload-artifact@v4
- with:
- name: android-hardware_navigation_tests_appium
- path: appium.log
\ No newline at end of file
diff --git a/archive/.github/workflows/archive/pullrequest_endtoend.yml b/archive/.github/workflows/archive/pullrequest_endtoend.yml
deleted file mode 100644
index cea34a567..000000000
--- a/archive/.github/workflows/archive/pullrequest_endtoend.yml
+++ /dev/null
@@ -1,206 +0,0 @@
-name: Build & Test Pull Requests UI Tests
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- end-to-end-tests:
- runs-on: ${{ matrix.os }}
- strategy:
- matrix:
- platform: [android] #, ios, windows]
- include:
- - platform: android
- os: ubuntu-latest
- - platform: ios
- os: macos-latest
- - platform: windows
- os: windows-latest
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- ##############################
- # Setup .NET and Dependencies
- ##############################
- - name: Set up .NET
- uses: actions/setup-dotnet@v3
- with:
- dotnet-version: 8.0.x
-
- - name: Install MAUI Workloads for Android
- if: matrix.platform == 'android'
- run: dotnet workload install android --ignore-failed-sources
-
- - name: Install MAUI Workloads for iOS
- if: matrix.platform == 'ios'
- run: dotnet workload install maui --ignore-failed-sources
-
- - name: Install MAUI Workloads for Windows
- if: matrix.platform == 'windows'
- run: dotnet workload install maui --ignore-failed-sources
-
- ###########################
- # 🐳 Start Backend System (Docker)
- ###########################
- - name: Install Docker Desktop (macOS only)
- if: runner.os == 'macOS'
- run: |
- brew install docker
- # Install Docker daemon (Docker CLI can work with a running daemon)
- brew install --cask colima # Colima is a lightweight Docker alternative
- colima start # Start Colima which runs the Docker daemon
- # Wait for Docker to initialize
- sleep 30 # Wait for Docker to be ready
- docker info || (echo "Docker is not running" && exit 1)
-
- - name: Set up Docker (Ubuntu)
- if: runner.os == 'Linux'
- run: |
- #sudo apt-get purge -y containerd.io
-
- # Update package information and install Docker
- #sudo apt-get update
- #sudo apt-get install -y docker.io
-
- # Enable Docker service to start on boot (in case it's required)
- #sudo systemctl enable --now docker
-
- # Check Docker version to ensure it's installed properly
- docker --version
- docker info
-
- # Allow current user to access Docker without sudo (optional, for convenience)
- sudo usermod -aG docker $USER
-
- # Restart Docker service to apply changes
- sudo systemctl restart docker
-
- ###########################
- # 🛠 Install Appium & Drivers
- ###########################
- - name: Install Node.js
- uses: actions/setup-node@v3
- with:
- node-version: 18
-
- - name: Install Appium and Drivers
- run: |
- npm install -g appium
- appium driver install uiautomator2
- appium driver install xcuitest
- appium driver install windows
-
- - name: Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- ##############################
- # 🟢 Android: Start Emulator
- ##############################
- - name: Install Android SDK & Start Emulator (Linux)
- if: matrix.platform == 'android'
- run: |
- # Install dependencies
- sudo apt-get update
- sudo apt-get install -y unzip wget libglu1-mesa
-
- # Set up Android SDK directory
- export ANDROID_HOME=$HOME/android-sdk
- export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH
- mkdir -p $ANDROID_HOME/cmdline-tools
-
- # Download and install Android command-line tools
- wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdline-tools.zip
- unzip -q cmdline-tools.zip -d $ANDROID_HOME/cmdline-tools
- rm cmdline-tools.zip
- mv $ANDROID_HOME/cmdline-tools/cmdline-tools $ANDROID_HOME/cmdline-tools/latest
-
- # Accept licenses
- yes | sdkmanager --licenses || true
-
- # Install required Android SDK packages
- sdkmanager --sdk_root=$ANDROID_HOME --install "platform-tools" "emulator" "system-images;android-31;google_apis;x86_64"
-
- # Verify installation
- sdkmanager --list | grep "system-images;android-31;google_apis;x86_64"
-
- # Create and start emulator
- echo "no" | avdmanager create avd -n testEmulator -k "system-images;android-31;google_apis;x86_64" --device "pixel_4"
-
- echo "⏳ Pausing for 10 seconds to ensure AVD registration..."
- sleep 30
-
- # Start the emulator in the background
- nohup emulator -avd testEmulator -no-window -no-audio -gpu swiftshader_indirect -no-snapshot -no-boot-anim &
-
- # Wait up to 5 minutes (300 seconds) for the emulator to be ready
- timeout=300
- while [[ $timeout -gt 0 ]]; do
- boot_status=$(adb shell getprop sys.boot_completed 2>&1)
- echo "Waiting for emulator... Boot status: $boot_status"
- if [[ "$boot_status" == "1" ]]; then
- echo "✅ Emulator booted successfully!"
- exit 0
- fi
- sleep 5
- ((timeout -= 5))
- done
-
- echo "❌ Emulator failed to boot within timeout!"
- exit 1
-
-
- ##############################
- # 🍏 iOS: Start Simulator
- ##############################
- - name: Start iOS Simulator
- if: matrix.platform == 'ios'
- run: |
- open -a Simulator &
- xcrun simctl list
- xcrun simctl boot "iPhone 14"
- xcrun simctl list devices
-
- ##############################
- # 🔨 Build .NET MAUI App
- ##############################
- - name: Build MAUI App for Android
- if: matrix.platform == 'android'
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-android -c Release --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- - name: Build MAUI App for iOS
- if: matrix.platform == 'ios'
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-ios -c Release --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- - name: Build MAUI App for Windows
- if: matrix.platform == 'windows'
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-windows -c Release --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- ##############################
- # 🚀 Run Appium UI Tests
- ##############################
- - name: Run Appium Tests (Android)
- if: matrix.platform == 'android'
- run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter (Category=PRTest)&(Category=Android)
-
- - name: Run Appium Tests (iOS)
- if: matrix.platform == 'ios'
- run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter (Category=PRTest)&(Category=iOS)
-
- - name: Run Appium Tests (Windows)
- if: matrix.platform == 'windows'
- run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter "Category=PRTest&Category=Windows"
-
- ##############################
- # 📤 Upload Logs if Tests Fail
- ##############################
- - name: Upload logs if tests fail
- if: failure()
- uses: actions/upload-artifact@v4
- with:
- name: appium-logs-${{ matrix.test-type }}
- path: artifacts/appium-logs-${{ matrix.test-type }}.log
diff --git a/archive/.github/workflows/archive/pullrequest_navigationtests.yml b/archive/.github/workflows/archive/pullrequest_navigationtests.yml
deleted file mode 100644
index c6c21b80c..000000000
--- a/archive/.github/workflows/archive/pullrequest_navigationtests.yml
+++ /dev/null
@@ -1,132 +0,0 @@
-# name: Build & Test Pull Requests UI Tests
-
-# on:
-# pull_request:
-# branches:
-# - main
-
-# jobs:
-# end-to-end-tests:
-# runs-on: ${{ matrix.os }}
-# strategy:
-# matrix:
-# platform: [android, ios, windows]
-# include:
-# - platform: android
-# os: ubuntu-latest
-# - platform: ios
-# os: macos-latest
-# - platform: windows
-# os: windows-latest
-
-# steps:
-# - name: Checkout repository
-# uses: actions/checkout@v4
-
-# ##############################
-# # Setup .NET and Dependencies
-# ##############################
-# - name: Set up .NET
-# uses: actions/setup-dotnet@v3
-# with:
-# dotnet-version: 8.0.x
-
-# - name: Install MAUI Workloads
-# run: dotnet workload install maui
-
-# ###########################
-# # 🛠 Install Appium & Drivers
-# ###########################
-# - name: Install Node.js
-# uses: actions/setup-node@v3
-# with:
-# node-version: 18
-
-# - name: Install Appium and Drivers
-# run: |
-# npm install -g appium
-# appium driver install uiautomator2
-# appium driver install xcuitest
-# appium driver install windows
-
-# - name: Start Appium Server
-# run: |
-# nohup appium --log appium.log &
-
-# ##############################
-# # 🟢 Android: Start Emulator
-# ##############################
-# - name: Install Android SDK & Emulator
-# if: matrix.platform == 'android'
-# run: |
-# sudo apt update
-# sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
-# sudo usermod -aG libvirt $USER
-# sudo usermod -aG kvm $USER
-# sdkmanager --install "system-images;android-31;default;x86_64"
-# echo "no" | avdmanager create avd -n testEmulator -k "system-images;android-31;default;x86_64" --device "pixel_4"
-# nohup emulator -avd testEmulator -no-window -no-audio -gpu swiftshader_indirect &
-
-# - name: Wait for Emulator to Boot
-# if: matrix.platform == 'android'
-# run: |
-# adb wait-for-device
-# adb shell settings put global window_animation_scale 0
-# adb shell settings put global transition_animation_scale 0
-# adb shell settings put global animator_duration_scale 0
-# adb devices
-
-# ##############################
-# # 🍏 iOS: Start Simulator
-# ##############################
-# - name: Start iOS Simulator
-# if: matrix.platform == 'ios'
-# run: |
-# open -a Simulator &
-# xcrun simctl list
-# xcrun simctl boot "iPhone 14"
-# xcrun simctl list devices
-
-# ##############################
-# # 🔨 Build .NET MAUI App
-# ##############################
-# - name: Build MAUI App for Android
-# if: matrix.platform == 'android'
-# run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-android -c Release --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
-# - name: Build MAUI App for iOS
-# if: matrix.platform == 'ios'
-# run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-ios -c Release --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
-# - name: Build MAUI App for Windows
-# if: matrix.platform == 'windows'
-# run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-windows -c Release --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
-# ##############################
-# # 🚀 Run Appium UI Tests
-# ##############################
-# - name: Run Appium Navigation Tests (Android)
-# if: matrix.platform == 'android'
-# run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter (Category=PRNavTest)&(Category=Android)
-
-# - name: Run Appium Navigation Hardware Tests (Android)
-# if: matrix.platform == 'android'
-# run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter (Category=PRHWNavTest)&(Category=Android)
-
-# - name: Run Appium Tests (iOS)
-# if: matrix.platform == 'ios'
-# run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter (Category=PRNavTest)&(Category=iOS)
-
-# - name: Run Appium Tests (Windows)
-# if: matrix.platform == 'windows'
-# run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter "Category=PRNavTest&Category=Windows"
-
-# ##############################
-# # 📤 Upload Logs if Tests Fail
-# ##############################
-# - name: Upload logs if tests fail
-# if: failure()
-# uses: actions/upload-artifact@v3
-# with:
-# name: appium-logs-${{ matrix.test-type }}
-# path: artifacts/appium-logs-${{ matrix.test-type }}.log
diff --git a/archive/.github/workflows/archive/pullrequest_unittests.yml b/archive/.github/workflows/archive/pullrequest_unittests.yml
deleted file mode 100644
index b94b0cc61..000000000
--- a/archive/.github/workflows/archive/pullrequest_unittests.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-# name: Build & Test Pull Requests Unit Tests
-
-# on:
-# pull_request:
-# branches:
-# - main
-
-# env:
-# DOTNET_NOLOGO: true # Disable the .NET logo
-# DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true # Disable the .NET first time experience
-# DOTNET_CLI_TELEMETRY_OPTOUT: true # Disable sending .NET CLI telemetry
-
-# jobs:
-# unit-tests :
-# runs-on: ubuntu-latest
-# name: Android Build - Unit Tests
-# steps:
-# - name: Checkout
-# uses: actions/checkout@v3
-
-# - name: Install MAUI Workloads
-# run: |
-# dotnet workload install android --ignore-failed-sources
-# dotnet workload install maui --ignore-failed-sources
-
-# - name: Restore Dependencies
-# run: dotnet restore TransactionMobile.Maui.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
-# - name: Build Code
-# run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -c Release -f net8.0-android --no-restore
-
-# - name: Run Unit Tests
-# run: dotnet test TransactionMobile.Maui.BusinessLogic.Tests/TransactionMobile.Maui.BusinessLogic.Tests.csproj
\ No newline at end of file
diff --git a/archive/.github/workflows/createrelease.yml b/archive/.github/workflows/createrelease.yml
deleted file mode 100644
index 0ac884651..000000000
--- a/archive/.github/workflows/createrelease.yml
+++ /dev/null
@@ -1,199 +0,0 @@
-name: Release
-
-on:
- release:
- types: [published]
-
-env:
- DOTNET_NOLOGO: true # Disable the .NET logo
- DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true # Disable the .NET first time experience
- DOTNET_CLI_TELEMETRY_OPTOUT: true # Disable sending .NET CLI telemetry
- ACTIONS_ALLOW_UNSECURE_COMMANDS: true
-
-jobs:
- release_android:
- runs-on: windows-2022
- name: "Android Release"
- env:
- ASPNETCORE_ENVIRONMENT: "Production"
-
- steps:
- - name: Checkout
- uses: actions/checkout@v3
-
- - name: Setup Keystore File
- run: |
- echo "${{secrets.KEYSTORE_FILE }}" > transactionprocessing.keystore.asc
- gpg -d --passphrase "${{ secrets.KEYSTORE_PASSWORD_GPG }}" --batch transactionprocessing.keystore.asc > transactionprocessing.keystore
-
- - name: Get the version
- id: get_version
- run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
- shell: bash
-
- - name: Setup .NET 8
- uses: actions/setup-dotnet@v2
- with:
- dotnet-version: 8.0.x
-
- - name: Install MAUI Workload
- run: dotnet workload install maui --ignore-failed-sources
-
- - name: Restore Dependencies
- run: dotnet restore TransactionMobile.Maui.sln
-
- - name: Set Application Version
- uses: TransactionProcessing/actions@1.0.1
- with:
- filepath: 'TransactionMobile.Maui/TransactionMobile.Maui.csproj'
- versionnumber: ${{ steps.get_version.outputs.VERSION }}
- isWindows: false
-
- - name: Build Android
- run: dotnet publish TransactionMobile.Maui/TransactionMobile.Maui.csproj -c Release -f net8.0-android --no-restore /p:AndroidSigningKeyStore=transactionprocessing.keystore /p:AndroidSigningKeyPass="${{ secrets.KEYSTORE_PASSWORD }}"
-
- - name: Upload Android Artifact
- uses: actions/upload-artifact@v3
- with:
- name: android-ci-build
- path: TransactionMobile.Maui/bin/Release/net8.0-android/com.transactionprocessing.pos-Signed.apk
-
- - name: Upload Artifact to App Center
- uses: Coxxs/AppCenter-Github-Action@v1
- with:
- appName: "Transaction-Processing/POS-Android"
- token: ${{secrets.APPCENTER_ANDROID_TOKEN}}
- group: Merchants
- file: TransactionMobile.Maui/bin/Release/net8.0-android/com.transactionprocessing.pos-Signed.apk
- notifyTesters: true
- debug: false
- gitReleaseNotes: true
-
- release_windows:
- runs-on: windows-2022
- name: "Windows Release"
- env:
- ASPNETCORE_ENVIRONMENT: "Production"
-
- steps:
- - name: Checkout
- uses: actions/checkout@v3
-
- - name: Get the version
- id: get_version
- run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
- shell: bash
-
- - name: Setup .NET 8
- uses: actions/setup-dotnet@v2
- with:
- dotnet-version: 8.0.x
-
- - name: Install MAUI Workload
- run: dotnet workload install maui --ignore-failed-sources
-
- - name: Restore Dependencies
- run: dotnet restore TransactionMobile.Maui.sln
-
- - name: Set Application Version
- uses: TransactionProcessing/actions@1.0.1
- with:
- filepath: 'TransactionMobile.Maui/TransactionMobile.Maui.csproj'
- versionnumber: ${{ steps.get_version.outputs.VERSION }}
- isWindows: true
-
- - name: Build Windows
- run: dotnet publish TransactionMobile.Maui/TransactionMobile.Maui.csproj -c Release -f net8.0-windows10.0.19041.0 --no-restore
-
- - name: Upload Windows Artifact
- uses: actions/upload-artifact@v3
- with:
- name: windows-ci-build
- path: TransactionMobile.Maui/bin/Release/net8.0-windows10.0.19041.0/win10-x64/AppPackages/TransactionMobile*/TransactionMobile*.msix
-
- - name: Upload Artifact to App Center
- uses: Coxxs/AppCenter-Github-Action@v1
- with:
- appName: "Transaction-Processing/POS-Windows"
- token: ${{secrets.APPCENTER_WINDOWS_TOKEN}}
- group: Merchants
- file: "TransactionMobile.Maui/bin/Release/net8.0-windows10.0.19041.0/win10-x64/AppPackages/TransactionMobile.Maui_${{ steps.get_version.outputs.VERSION }}.0_Test/TransactionMobile.Maui_${{ steps.get_version.outputs.VERSION }}.0_x64.msix"
- notifyTesters: true
- debug: false
- gitReleaseNotes: true
-
- release-mac:
- runs-on: macos-11
- name: MacCatalyst Release
- steps:
- - name: Checkout
- uses: actions/checkout@v3
-
- - name: Get the version
- id: get_version
- run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
-
- - name: Setup .NET 8
- uses: actions/setup-dotnet@v2
- with:
- dotnet-version: 8.0.x
-
- - name: Install MAUI Workload
- run: dotnet workload install maui --ignore-failed-sources
-
- - name: Restore Dependencies
- run: dotnet restore TransactionMobile.Maui.sln
-
- - name: Set Application Version
- uses: TransactionProcessing/actions@1.0.1
- with:
- filepath: 'TransactionMobile.Maui/TransactionMobile.Maui.csproj'
- versionnumber: ${{ steps.get_version.outputs.VERSION }}
- isWindows: false
-
- - name: Build MacCatalyst
- run: dotnet publish TransactionMobile.Maui/TransactionMobile.Maui.csproj -c Release -f net8.0-maccatalyst --no-restore
-
- - name: Upload MacCatalyst Artifact
- uses: actions/upload-artifact@v3
- with:
- name: macos-ci-build
- path: TransactionMobile.Maui/bin/Release/net8.0-maccatalyst/maccatalyst-x64/publish/*.pkg
-
- release-ios:
- runs-on: macos-11
- name: iOS Release
- steps:
- - name: Checkout
- uses: actions/checkout@v3
-
- - name: Get the version
- id: get_version
- run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
-
- - name: Setup .NET 8
- uses: actions/setup-dotnet@v2
- with:
- dotnet-version: 8.0.x
-
- - name: Install MAUI Workload
- run: dotnet workload install maui --ignore-failed-sources
-
- - name: Restore Dependencies
- run: dotnet restore TransactionMobile.Maui.sln
-
- - name: Set Application Version
- uses: TransactionProcessing/actions@1.0.1
- with:
- filepath: 'TransactionMobile.Maui/TransactionMobile.Maui.csproj'
- versionnumber: ${{ steps.get_version.outputs.VERSION }}
- isWindows: false
-
- - name: Build iOS
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -c Release -f net8.0-ios --no-restore /p:buildForSimulator=True /p:packageApp=True /p:ArchiveOnBuild=False
-
- - name: Upload MacCatalyst Artifact
- uses: actions/upload-artifact@v3
- with:
- name: iOS-ci-build
- path: TransactionMobile.Maui/bin/Release/net8.0-ios/iossimulator-x64/**/*.app
diff --git a/archive/.github/workflows/ios_e2e_tests.yml b/archive/.github/workflows/ios_e2e_tests.yml
deleted file mode 100644
index 69b78ecd9..000000000
--- a/archive/.github/workflows/ios_e2e_tests.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-name: Build and Run iOS End To End Tests
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- e2e_tests:
- runs-on: macos-14
- env:
- PLATFORM_VERSION: "17.2"
- DEVICE_NAME: "iPhone 15"
- APP_PATH: "./MyTestApp.app"
-
- steps:
- - name: 🧾 Checkout repo
- uses: actions/checkout@v4
-
- - name: 🔧 Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: '20'
-
- - name: 🔧 Set up .NET
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: '8.0.x'
-
- - name: 📦 Install Appium + XCUITest driver
- run: |
- npm install -g appium
- appium driver install xcuitest
-
- - name: 🧹 Clean DerivedData and WDA cache
- run: |
- rm -rf ~/Library/Developer/Xcode/DerivedData
- rm -rf ~/.appium/node_modules/appium-webdriveragent/Build
-
- - name: 🧪 Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- - name: 📱 Create iOS Simulator (if needed)
- run: |
- SIMULATOR_NAME="ci-sim-$RANDOM"
- xcrun simctl create "$SIMULATOR_NAME" "$DEVICE_NAME" "com.apple.CoreSimulator.SimRuntime.iOS-${PLATFORM_VERSION//./-}"
- echo "SIMULATOR_NAME=$SIMULATOR_NAME" >> $GITHUB_ENV
-
- - name: 🚀 Boot simulator
- run: |
- xcrun simctl boot "$SIMULATOR_NAME"
- xcrun simctl list | grep Booted
-
- - name: Install MAUI Workloads
- run: |
- dotnet workload install ios --ignore-failed-sources
- dotnet workload install maui --ignore-failed-sources
-
- - name: Restore MAUI App for iOS
- run: dotnet restore TransactionMobile.Maui.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- - name: Build Code
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-ios -c Release --no-restore
-
- - name: Run iOS Navigation Tests
- run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter "(Category=iOSPRTest)&(Category=iOS)" --no-restore
-
- - name: Upload Appium Logs on Failure
- if: failure()
- uses: actions/upload-artifact@v4
- with:
- name: ios-software_navigation_tests_appium
- path: appium.log
-
-
\ No newline at end of file
diff --git a/archive/.github/workflows/ios_navigation_tests.yml b/archive/.github/workflows/ios_navigation_tests.yml
deleted file mode 100644
index 5eebf5f6e..000000000
--- a/archive/.github/workflows/ios_navigation_tests.yml
+++ /dev/null
@@ -1,76 +0,0 @@
-name: Build and Run iOS Navigation Tests
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- software_navigation_tests:
- runs-on: macos-14
- env:
- PLATFORM_VERSION: "17.2"
- DEVICE_NAME: "iPhone 15"
- APP_PATH: "./MyTestApp.app"
-
- steps:
- - name: 🧾 Checkout repo
- uses: actions/checkout@v4
-
- - name: 🔧 Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: '20'
-
- - name: 🔧 Set up .NET
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: '8.0.x'
-
- - name: 📦 Install Appium + XCUITest driver
- run: |
- npm install -g appium
- appium driver install xcuitest
-
- - name: 🧹 Clean DerivedData and WDA cache
- run: |
- rm -rf ~/Library/Developer/Xcode/DerivedData
- rm -rf ~/.appium/node_modules/appium-webdriveragent/Build
-
- - name: 🧪 Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- - name: 📱 Create iOS Simulator (if needed)
- run: |
- SIMULATOR_NAME="ci-sim-$RANDOM"
- xcrun simctl create "$SIMULATOR_NAME" "$DEVICE_NAME" "com.apple.CoreSimulator.SimRuntime.iOS-${PLATFORM_VERSION//./-}"
- echo "SIMULATOR_NAME=$SIMULATOR_NAME" >> $GITHUB_ENV
-
- - name: 🚀 Boot simulator
- run: |
- xcrun simctl boot "$SIMULATOR_NAME"
- xcrun simctl list | grep Booted
-
- - name: Install MAUI Workloads
- run: |
- dotnet workload install ios --ignore-failed-sources
- dotnet workload install maui --ignore-failed-sources
-
- - name: Restore MAUI App for iOS
- run: dotnet restore TransactionMobile.Maui.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- - name: Build Code
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-ios -c Release --no-restore
-
- - name: Run iOS Navigation Tests
- run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter "(Category=PRNavTest)&(Category=iOS)" --no-restore
-
- - name: Upload Appium Logs on Failure
- if: failure()
- uses: actions/upload-artifact@v4
- with:
- name: ios-software_navigation_tests_appium
- path: appium.log
-
-
\ No newline at end of file
diff --git a/archive/.github/workflows/prlinked.yml b/archive/.github/workflows/prlinked.yml
deleted file mode 100644
index 84037c86c..000000000
--- a/archive/.github/workflows/prlinked.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-name: Move Linked Issues
-
-on:
- pull_request:
- types:
- - opened
- - synchronize
- - reopened
-
-jobs:
- get-date:
- runs-on: ubuntu-latest
- outputs:
- project_name_prefix: ${{ steps.format_date.outputs.formatted_date }}
- steps:
- - name: Get PR creation date
- id: format_date
- run: |
- # Extract the month and year from the PR creation date
- PR_DATE="${{ github.event.pull_request.created_at }}"
- FORMATTED_DATE=$(date -d "$PR_DATE" "+%B %Y") # Format to Month Year
-
- # Debugging: print out the formatted date
- echo "Formatted Date: ${FORMATTED_DATE} Sprint"
-
- # Set output using the Environment File method
- echo "formatted_date=${FORMATTED_DATE} Sprint" >> $GITHUB_OUTPUT # Set the output for later jobs
-
- debug-date:
- needs: get-date
- runs-on: ubuntu-latest
- steps:
- - name: Debug the outputs
- run: |
- echo "PR Number: ${{ github.event.pull_request.number }}"
- echo "Project Column Name: Review"
- echo "Project Name Prefix (from get-date job output): ${{ needs.get-date.outputs.project_name_prefix }}" # Access the output correctly
-
- move-issues:
- needs: get-date
- uses: TransactionProcessing/org-ci-workflows/.github/workflows/move-linked-issue.yml@main
- with:
- pr_number: ${{ github.event.pull_request.number }}
- project_column_name: "Review"
- project_name_prefix: ${{ needs.get-date.outputs.project_name_prefix }} # Access the output from get-date job
- secrets:
- gh_token: ${{ secrets.GH_TOKEN }}
diff --git a/archive/.github/workflows/release-management.yml b/archive/.github/workflows/release-management.yml
deleted file mode 100644
index bb787fe66..000000000
--- a/archive/.github/workflows/release-management.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-name: Release Management
-
-on:
- push:
- # branches to consider in the event; optional, defaults to all
- branches:
- - main
-
-jobs:
- update_draft_release:
- runs-on: ubuntu-latest
- steps:
- # Drafts your next Release notes as Pull Requests are merged into "master"
- - uses: toolmantim/release-drafter@v5.12.1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/archive/.github/workflows/repository_maintenance.yml b/archive/.github/workflows/repository_maintenance.yml
deleted file mode 100644
index dda1d4901..000000000
--- a/archive/.github/workflows/repository_maintenance.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-name: Maintenance Tasks
-
-on:
- repository_dispatch:
- workflow_dispatch:
- schedule:
- - cron: '0 0 * * *' # This schedule runs the workflow at midnight every day
-
-jobs:
- cleanup-stale-branches:
- runs-on: ubuntu-latest
- steps:
- - name: Cleanup Stale Branches
- uses: cbrgm/cleanup-stale-branches-action@v1
- with:
- token: ${{ secrets.GITHUB_TOKEN }}
- repository: ${{ github.repository }}
- last-commit-age-days: 60
- dry-run: false
- rate-limit: true
diff --git a/archive/.github/workflows/unit_tests.yml b/archive/.github/workflows/unit_tests.yml
deleted file mode 100644
index 7165b3348..000000000
--- a/archive/.github/workflows/unit_tests.yml
+++ /dev/null
@@ -1,60 +0,0 @@
-name: Build and Run Unit Tests
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- unit_tests:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Set up .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '8.0.x'
-
- - name: Install KVM and Android SDK (x86)
- run: |
- # Set up environment variables
- export ANDROID_SDK_ROOT=$HOME/android-sdk
- export ANDROID_HOME=$ANDROID_SDK_ROOT
- export PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH
-
- # Create necessary directories
- mkdir -p $ANDROID_SDK_ROOT/cmdline-tools
-
- # Download and install command-line tools
- wget -q https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip
- unzip -q commandlinetools-linux-*.zip -d $ANDROID_SDK_ROOT/cmdline-tools
- mv $ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools $ANDROID_SDK_ROOT/cmdline-tools/latest
- chmod +x $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager
-
- # Accept licenses and install required components
- yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
- # Install Android API level 34 and necessary system images
- $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-34" "system-images;android-34;google_apis;x86_64"
-
- # Export paths for future steps
- echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
- echo "ANDROID_HOME=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
- echo "PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH" >> $GITHUB_ENV
-
- - name: Install Android Build Tools
- run: |
- echo "Installing Android Build Tools..."
- sdkmanager "build-tools;34.0.0" # Updated to use Android 34 build tools
- sdkmanager --update
-
- - name: Install MAUI workloads
- run: |
- dotnet workload install maui-android
-
- - name: Build Code
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json -f net8.0-android -c Release #--no-restore
-
- - name: Run unit tests
- run: dotnet test TransactionMobile.Maui.BusinessLogic.Tests/TransactionMobile.Maui.BusinessLogic.Tests.csproj --configuration Release
diff --git a/archive/.github/workflows/windows_e2e_tests.yml b/archive/.github/workflows/windows_e2e_tests.yml
deleted file mode 100644
index d4c192b8c..000000000
--- a/archive/.github/workflows/windows_e2e_tests.yml
+++ /dev/null
@@ -1,84 +0,0 @@
-name: Build and Run Windows End to End Tests
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- end_to_end_tests:
- runs-on: windows-2022
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Build Windows SQL Server
- run: |
- cd SQLDocker
- docker build -t mssqlserver:2022-ltsc2022 --build-arg SQL_VERSION=2022 --build-arg WIN_VERSION=ltsc2022 .
-
- - name: Setup MSBuild
- uses: microsoft/setup-msbuild@v1.1
- with:
- vs-prerelease: true
-
- - name: Set up .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '8.0.x'
-
- - name: Install MAUI workloads
- run: |
- dotnet workload install maui
-
- - name: Install Appium and Drivers
- run: |
- npm install -g appium --unsafe-perm=true --allow-root
- appium driver install --source=npm appium-windows-driver
-
- - name: Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- - name: Restore MAUI App for Android
- run: dotnet restore TransactionMobile.Maui.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- - name: Build Code
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-android -c Release --no-restore
-
- - name: Decrypt PFX File
- run: |
- echo "${{ secrets.WINDOWSSIGNINGCERT }}" > cert.pfx.asc
- certutil -decode cert.pfx.asc cert.pfx
-
- - name: Add Cert to Store
- run: certutil -user -q -p ${{ secrets.WINDOWSSIGNINGCERTPWD }} -importpfx cert.pfx NoRoot
-
- - name: Publish App
- run: |
- dotnet publish TransactionMobile.Maui/TransactionMobile.Maui.csproj -c Release -f net8.0-windows10.0.19041.0 /p:AppxPackageSigningEnabled=true /p:PackageCertificateThumbprint="${{ secrets.WINDOWSSIGNINGCERTTHUMBPRINT }}"
-
- - name: Install App
- shell: powershell
- run: |
- Import-Module Appx
- .\TransactionMobile.Maui/bin/Release/net8.0-windows10.0.19041.0/win10-x64/AppPackages/TransactionMobile.Maui_1.0.0.0_Test/Install.ps1 -Force
-
- - name: Run Windows End To End Tests
- env:
- IsCI: true
- run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter "(Category=PRTest)&(Category=Windows)" --no-restore
-
- - name: Upload Logs on Failure
- if: failure() # Runs only if a previous step fails
- uses: actions/upload-artifact@v4
- with:
- name: windows-e2e_tests
- path: C:\\Users\\runneradmin\\txnproc
-
- - name: Upload Appium Logs on Failure
- if: failure()
- uses: actions/upload-artifact@v4
- with:
- name: windows-e2e_tests_appium
- path: appium.log
diff --git a/archive/.github/workflows/windows_navigation_tests.yml b/archive/.github/workflows/windows_navigation_tests.yml
deleted file mode 100644
index 90f804306..000000000
--- a/archive/.github/workflows/windows_navigation_tests.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-name: Build and Run Windows Navigation Tests
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- software_navigation_tests:
- runs-on: windows-2022
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
-
- - name: Setup MSBuild
- uses: microsoft/setup-msbuild@v1.1
- with:
- vs-prerelease: true
-
- - name: Set up .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '8.0.x'
-
- - name: Install MAUI workloads
- run: |
- dotnet workload install maui
-
- - name: Install Appium and Drivers
- run: |
- npm install -g appium --unsafe-perm=true --allow-root
- appium driver install --source=npm appium-windows-driver
-
- - name: Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- - name: Restore MAUI App for Android
- run: dotnet restore TransactionMobile.Maui.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- - name: Build Code
- run: dotnet build TransactionMobile.Maui/TransactionMobile.Maui.csproj -f net8.0-android -c Release --no-restore
-
- - name: Decrypt PFX File
- run: |
- echo "${{ secrets.WINDOWSSIGNINGCERT }}" > cert.pfx.asc
- certutil -decode cert.pfx.asc cert.pfx
-
- - name: Add Cert to Store
- run: certutil -user -q -p ${{ secrets.WINDOWSSIGNINGCERTPWD }} -importpfx cert.pfx NoRoot
-
- - name: Publish App
- run: |
- dotnet publish TransactionMobile.Maui/TransactionMobile.Maui.csproj -c Release -f net8.0-windows10.0.19041.0 /p:AppxPackageSigningEnabled=true /p:PackageCertificateThumbprint="${{ secrets.WINDOWSSIGNINGCERTTHUMBPRINT }}"
-
- - name: Install App
- shell: powershell
- run: |
- Import-Module Appx
- .\TransactionMobile.Maui/bin/Release/net8.0-windows10.0.19041.0/win10-x64/AppPackages/TransactionMobile.Maui_1.0.0.0_Test/Install.ps1 -Force
-
- - name: Run Windows Navigation Tests
- run: dotnet test TransactionMobile.Maui.UiTests/TransactionMobile.Maui.UiTests.csproj --filter "(Category=PRNavTest)&(Category=Windows)" --no-restore
-
- - name: Upload Appium Logs on Failure
- if: failure()
- uses: actions/upload-artifact@v4
- with:
- name: windows-software_navigation_tests_appium
- path: appium.log
-
-
\ No newline at end of file
diff --git a/archive/TransactionMobile.Maui.BusinessLogic.Tests/CommonTests/ExtensionsTests.cs b/archive/TransactionMobile.Maui.BusinessLogic.Tests/CommonTests/ExtensionsTests.cs
deleted file mode 100644
index e5b51d393..000000000
--- a/archive/TransactionMobile.Maui.BusinessLogic.Tests/CommonTests/ExtensionsTests.cs
+++ /dev/null
@@ -1,591 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace TransactionMobile.Maui.BusinessLogic.Tests.Common
-{
- using BusinessLogic.Common;
- using Database;
- using Models;
- using Requests;
- using Shouldly;
- using SimpleResults;
- using TransactionProcessorACL.DataTransferObjects;
- using TransactionProcessorACL.DataTransferObjects.Responses;
- using ViewModels.Transactions;
- using Xunit;
-
- public class ExtensionsTests{
- [Theory]
- [InlineData(true)]
- [InlineData(false)]
- public void LogonTransactionRequest_ToTransactionRecord_IsTranslated(Boolean inTrainingMode){
- LogonTransactionRequest request = LogonTransactionRequest.Create(TestData.TransactionDateTime);
- TransactionRecord transactionRecord = request.ToTransactionRecord(inTrainingMode);
- transactionRecord.TransactionDateTime.ShouldBe(request.TransactionDateTime);
- transactionRecord.TransactionType.ShouldBe(1);
- transactionRecord.IsTrainingMode.ShouldBe(inTrainingMode);
- }
-
- [Theory]
- [InlineData(true)]
- [InlineData(false)]
- public void PerformMobileTopupRequest_ToTransactionRecord_IsTranslated(Boolean inTrainingMode){
- PerformMobileTopupRequest request = PerformMobileTopupRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.CustomerAccountNumber,
- TestData.Operator1Product_100KES.Value,
- TestData.CustomerEmailAddress);
-
- TransactionRecord transactionRecord = request.ToTransactionRecord(inTrainingMode);
- transactionRecord.TransactionDateTime.ShouldBe(request.TransactionDateTime);
- transactionRecord.TransactionType.ShouldBe(2);
- transactionRecord.IsTrainingMode.ShouldBe(inTrainingMode);
- transactionRecord.Amount.ShouldBe(request.TopupAmount);
- transactionRecord.ProductId.ShouldBe(request.ProductId);
- transactionRecord.ContractId.ShouldBe(request.ContractId);
- transactionRecord.CustomerAccountNumber.ShouldBe(request.CustomerAccountNumber);
- transactionRecord.CustomerEmailAddress.ShouldBe(request.CustomerEmailAddress);
- transactionRecord.OperatorId.ShouldBe(request.OperatorId);
- }
-
- [Theory]
- [InlineData(true)]
- [InlineData(false)]
- public void PerformVoucherIssueRequest_ToTransactionRecord_IsTranslated(Boolean inTrainingMode){
- PerformVoucherIssueRequest request = PerformVoucherIssueRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.RecipientMobileNumber,
- TestData.RecipientEmailAddress,
- TestData.Operator3Product_200KES.Value,
- TestData.CustomerEmailAddress);
-
- TransactionRecord transactionRecord = request.ToTransactionRecord(inTrainingMode);
- transactionRecord.TransactionDateTime.ShouldBe(request.TransactionDateTime);
- transactionRecord.TransactionType.ShouldBe(2);
- transactionRecord.IsTrainingMode.ShouldBe(inTrainingMode);
- transactionRecord.Amount.ShouldBe(request.VoucherAmount);
- transactionRecord.ProductId.ShouldBe(request.ProductId);
- transactionRecord.ContractId.ShouldBe(request.ContractId);
- transactionRecord.RecipientEmailAddress.ShouldBe(request.RecipientEmailAddress);
- transactionRecord.RecipientMobileNumber.ShouldBe(request.RecipientMobileNumber);
- transactionRecord.CustomerEmailAddress.ShouldBe(request.CustomerEmailAddress);
- transactionRecord.OperatorId.ShouldBe(request.OperatorId);
- }
-
- [Theory]
- [InlineData(true)]
- [InlineData(false)]
- public void PerformBillPaymentGetAccountRequest_ToTransactionRecord_IsTranslated(Boolean inTrainingMode){
- PerformBillPaymentGetAccountRequest request = PerformBillPaymentGetAccountRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.CustomerAccountNumber);
-
- TransactionRecord transactionRecord = request.ToTransactionRecord(inTrainingMode);
- transactionRecord.TransactionDateTime.ShouldBe(request.TransactionDateTime);
- transactionRecord.TransactionType.ShouldBe(2);
- transactionRecord.IsTrainingMode.ShouldBe(inTrainingMode);
- transactionRecord.ProductId.ShouldBe(request.ProductId);
- transactionRecord.ContractId.ShouldBe(request.ContractId);
- transactionRecord.CustomerAccountNumber.ShouldBe(request.CustomerAccountNumber);
- transactionRecord.OperatorId.ShouldBe(request.OperatorId);
- }
-
- [Theory]
- [InlineData(true)]
- [InlineData(false)]
- public void PerformBillPaymentMakePostPaymentRequest_ToTransactionRecord_IsTranslated(Boolean inTrainingMode){
- PerformBillPaymentMakePostPaymentRequest request = PerformBillPaymentMakePostPaymentRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.CustomerAccountNumber,
- TestData.CustomerAccountName,
- TestData.CustomerMobileNumber,
- TestData.PaymentAmount);
-
- TransactionRecord transactionRecord = request.ToTransactionRecord(inTrainingMode);
- transactionRecord.TransactionDateTime.ShouldBe(request.TransactionDateTime);
- transactionRecord.TransactionType.ShouldBe(2);
- transactionRecord.IsTrainingMode.ShouldBe(inTrainingMode);
- transactionRecord.ProductId.ShouldBe(request.ProductId);
- transactionRecord.ContractId.ShouldBe(request.ContractId);
- transactionRecord.CustomerAccountNumber.ShouldBe(request.CustomerAccountNumber);
- transactionRecord.OperatorId.ShouldBe(request.OperatorId);
- }
-
- [Theory]
- [InlineData(true)]
- [InlineData(false)]
- public void PerformBillPaymentMakePrePaymentRequest_ToTransactionRecord_IsTranslated(Boolean inTrainingMode){
- PerformBillPaymentMakePostPaymentRequest request = PerformBillPaymentMakePostPaymentRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.CustomerAccountNumber,
- TestData.CustomerAccountName,
- TestData.CustomerMobileNumber,
- TestData.PaymentAmount);
-
- TransactionRecord transactionRecord = request.ToTransactionRecord(inTrainingMode);
- transactionRecord.TransactionDateTime.ShouldBe(request.TransactionDateTime);
- transactionRecord.TransactionType.ShouldBe(2);
- transactionRecord.IsTrainingMode.ShouldBe(inTrainingMode);
- transactionRecord.ProductId.ShouldBe(request.ProductId);
- transactionRecord.ContractId.ShouldBe(request.ContractId);
- transactionRecord.CustomerAccountNumber.ShouldBe(request.CustomerAccountNumber);
- transactionRecord.OperatorId.ShouldBe(request.OperatorId);
- }
-
- [Theory]
- [InlineData(true)]
- [InlineData(false)]
- public void PerformBillPaymentGetMeterRequest_ToTransactionRecord_IsTranslated(Boolean inTrainingMode){
- PerformBillPaymentGetMeterRequest request = PerformBillPaymentGetMeterRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.CustomerAccountNumber);
-
- TransactionRecord transactionRecord = request.ToTransactionRecord(inTrainingMode);
- transactionRecord.TransactionDateTime.ShouldBe(request.TransactionDateTime);
- transactionRecord.TransactionType.ShouldBe(2);
- transactionRecord.IsTrainingMode.ShouldBe(inTrainingMode);
- transactionRecord.ProductId.ShouldBe(request.ProductId);
- transactionRecord.ContractId.ShouldBe(request.ContractId);
- transactionRecord.CustomerAccountNumber.ShouldBe(request.MeterNumber);
- transactionRecord.OperatorId.ShouldBe(request.OperatorId);
- }
-
- [Fact]
- public void TransactionRecord_UpdateFrom_PerformLogonResponseModel_IsUpdated(){
- TransactionRecord transactionRecord = new TransactionRecord();
-
- transactionRecord.IsSuccessful.ShouldBeFalse();
-
- Result result = Result.Success(TestData.PerformLogonResponseModel);
-
- TransactionRecord updatedRecord = transactionRecord.UpdateFrom(result);
- updatedRecord.IsSuccessful.ShouldBe(result.Data.IsSuccessful);
- updatedRecord.ResponseMessage.ShouldBe(result.Data.ResponseMessage);
- updatedRecord.EstateId.ShouldBe(result.Data.EstateId);
- updatedRecord.MerchantId.ShouldBe(result.Data.MerchantId);
- }
-
- [Fact]
- public void TransactionRecord_UpdateFrom_PerformMobileTopupResponseModel_IsUpdated(){
- TransactionRecord transactionRecord = new TransactionRecord();
-
- transactionRecord.IsSuccessful.ShouldBeFalse();
-
- Result result = Result.Success(new PerformMobileTopupResponseModel{
- ResponseCode = "0000"
- });
-
- TransactionRecord updatedRecord = transactionRecord.UpdateFrom(result);
- updatedRecord.IsSuccessful.ShouldBe(result.Data.IsSuccessful);
- }
-
- [Fact]
- public void TransactionRecord_UpdateFrom_PerformVoucherIssueResponseModel_IsUpdated(){
- TransactionRecord transactionRecord = new TransactionRecord();
-
- transactionRecord.IsSuccessful.ShouldBeFalse();
-
- Result result = Result.Success(new PerformVoucherIssueResponseModel{
- ResponseCode = "0000"
- });
-
- TransactionRecord updatedRecord = transactionRecord.UpdateFrom(result);
- updatedRecord.IsSuccessful.ShouldBe(result.Data.IsSuccessful);
- }
-
- [Fact]
- public void TransactionRecord_UpdateFrom_PerformBillPaymentMakePaymentResponseModel_IsUpdated(){
- TransactionRecord transactionRecord = new TransactionRecord();
-
- transactionRecord.IsSuccessful.ShouldBeFalse();
-
- Result result = Result.Success(new PerformBillPaymentMakePaymentResponseModel{
- ResponseCode = "0000"
- });
-
- TransactionRecord updatedRecord = transactionRecord.UpdateFrom(result);
- updatedRecord.IsSuccessful.ShouldBe(result.Data.IsSuccessful);
- }
-
- [Fact]
- public void TransactionRecord_UpdateFrom_PerformBillPaymentGetAccountResponseModel_IsUpdated(){
- TransactionRecord transactionRecord = new TransactionRecord();
-
- transactionRecord.IsSuccessful.ShouldBeFalse();
-
- Result result = Result.Success(new PerformBillPaymentGetAccountResponseModel{
- BillDetails = new BillDetails()
- });
-
- TransactionRecord updatedRecord = transactionRecord.UpdateFrom(result);
- updatedRecord.IsSuccessful.ShouldBe(result.Data.IsSuccessful);
- }
-
- [Fact]
- public void TransactionRecord_UpdateFrom_PerformBillPaymentGetMeterResponseModel_IsUpdated(){
- TransactionRecord transactionRecord = new TransactionRecord();
-
- transactionRecord.IsSuccessful.ShouldBeFalse();
-
- Result result = Result.Success(new PerformBillPaymentGetMeterResponseModel{
- MeterDetails = new MeterDetails()
- });
-
- TransactionRecord updatedRecord = transactionRecord.UpdateFrom(result);
- updatedRecord.IsSuccessful.ShouldBe(result.Data.IsSuccessful);
- }
-
- [Fact]
- public void PerformLogonRequestModel_ToLogonTransactionRequest_LogonTransactionRequestMessageIsCreated(){
- PerformLogonRequestModel model = new PerformLogonRequestModel{
- TransactionDateTime = TestData.TransactionDateTime,
- DeviceIdentifier = TestData.DeviceIdentifier,
- ApplicationVersion = TestData.ApplicationVersion,
- TransactionNumber = TestData.TransactionNumber
- };
- LogonTransactionRequestMessage request = model.ToLogonTransactionRequest();
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(model.TransactionDateTime);
- request.DeviceIdentifier.ShouldBe(model.DeviceIdentifier);
- request.ApplicationVersion.ShouldBe(model.ApplicationVersion);
- request.TransactionNumber.ShouldBe(model.TransactionNumber);
- }
-
- [Fact]
- public void PerformReconciliationRequestModel_ToReconciliationRequest_ReconciliationRequestMessageIsCreated(){
- PerformReconciliationRequestModel model = new PerformReconciliationRequestModel{
- TransactionDateTime = TestData.TransactionDateTime,
- DeviceIdentifier = TestData.DeviceIdentifier,
- ApplicationVersion = TestData.ApplicationVersion,
- OperatorTotals = new List{
- new OperatorTotalModel{
- ContractId = TestData.OperatorId1ContractId,
- OperatorId = TestData.OperatorId1,
- TransactionCount = 10,
- TransactionValue = 100.00m
- }
- },
- TransactionCount = 10,
- TransactionValue = 100.00m
- };
- ReconciliationRequestMessage request = model.ToReconciliationRequest();
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(model.TransactionDateTime);
- request.DeviceIdentifier.ShouldBe(model.DeviceIdentifier);
- request.ApplicationVersion.ShouldBe(model.ApplicationVersion);
- request.TransactionCount.ShouldBe(model.TransactionCount);
- request.TransactionValue.ShouldBe(model.TransactionValue);
- request.OperatorTotals.Single().TransactionValue.ShouldBe(model.OperatorTotals.Single().TransactionValue);
- request.OperatorTotals.Single().TransactionCount.ShouldBe(model.OperatorTotals.Single().TransactionCount);
- request.OperatorTotals.Single().ContractId.ShouldBe(model.OperatorTotals.Single().ContractId);
- request.OperatorTotals.Single().OperatorId.ShouldBe(model.OperatorTotals.Single().OperatorId);
- }
-
- [Fact]
- public void PerformVoucherIssueRequestModel_ToSaleTransactionRequest_SaleTransactionRequestMessageIsCreated(){
- PerformVoucherIssueRequestModel model = new PerformVoucherIssueRequestModel{
- TransactionDateTime = TestData.TransactionDateTime,
- DeviceIdentifier = TestData.DeviceIdentifier,
- ApplicationVersion = TestData.ApplicationVersion,
- TransactionNumber = TestData.TransactionNumber,
- OperatorId = TestData.OperatorId1,
- CustomerEmailAddress = TestData.CustomerEmailAddress,
- RecipientEmailAddress = TestData.RecipientEmailAddress,
- VoucherAmount = TestData.PaymentAmount,
- ContractId = TestData.Operator1ProductDetails.ContractId,
- ProductId = TestData.Operator1ProductDetails.ProductId,
- RecipientMobileNumber = TestData.RecipientMobileNumber
- };
- var request = model.ToSaleTransactionRequest();
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(model.TransactionDateTime);
- request.DeviceIdentifier.ShouldBe(model.DeviceIdentifier);
- request.ApplicationVersion.ShouldBe(model.ApplicationVersion);
- request.TransactionNumber.ShouldBe(model.TransactionNumber);
- request.OperatorId.ShouldBe(model.OperatorId);
- request.CustomerEmailAddress.ShouldBe(model.CustomerEmailAddress);
- request.ContractId.ShouldBe(model.ContractId);
- request.ProductId.ShouldBe(model.ProductId);
- request.AdditionalRequestMetaData.ContainsKey("Amount").ShouldBeTrue();
- request.AdditionalRequestMetaData["Amount"].ShouldBe(model.VoucherAmount.ToString());
- request.AdditionalRequestMetaData.ContainsKey("RecipientEmail").ShouldBeTrue();
- request.AdditionalRequestMetaData["RecipientEmail"].ShouldBe(model.RecipientEmailAddress);
- request.AdditionalRequestMetaData.ContainsKey("RecipientMobile").ShouldBeTrue();
- request.AdditionalRequestMetaData["RecipientMobile"].ShouldBe(model.RecipientMobileNumber);
- }
-
- [Fact]
- public void PerformMobileTopupRequestModel_ToSaleTransactionRequest_SaleTransactionRequestMessageIsCreated(){
- PerformMobileTopupRequestModel model = new PerformMobileTopupRequestModel{
- TransactionDateTime = TestData.TransactionDateTime,
- DeviceIdentifier = TestData.DeviceIdentifier,
- ApplicationVersion = TestData.ApplicationVersion,
- TransactionNumber = TestData.TransactionNumber,
- OperatorId = TestData.OperatorId1,
- CustomerEmailAddress = TestData.CustomerEmailAddress,
- TopupAmount = TestData.PaymentAmount,
- ContractId = TestData.Operator1ProductDetails.ContractId,
- ProductId = TestData.Operator1ProductDetails.ProductId
- };
- var request = model.ToSaleTransactionRequest();
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(model.TransactionDateTime);
- request.DeviceIdentifier.ShouldBe(model.DeviceIdentifier);
- request.ApplicationVersion.ShouldBe(model.ApplicationVersion);
- request.TransactionNumber.ShouldBe(model.TransactionNumber);
- request.OperatorId.ShouldBe(model.OperatorId);
- request.CustomerEmailAddress.ShouldBe(model.CustomerEmailAddress);
- request.ContractId.ShouldBe(model.ContractId);
- request.ProductId.ShouldBe(model.ProductId);
- request.AdditionalRequestMetaData.ContainsKey("Amount").ShouldBeTrue();
- request.AdditionalRequestMetaData["Amount"].ShouldBe(model.TopupAmount.ToString());
- }
-
- [Fact]
- public void PerformBillPaymentGetAccountModel_ToSaleTransactionRequest_SaleTransactionRequestMessageIsCreated(){
- PerformBillPaymentGetAccountModel model = new PerformBillPaymentGetAccountModel{
- TransactionDateTime = TestData.TransactionDateTime,
- DeviceIdentifier = TestData.DeviceIdentifier,
- ApplicationVersion = TestData.ApplicationVersion,
- TransactionNumber = TestData.TransactionNumber,
- OperatorId = TestData.OperatorId1,
- ContractId = TestData.Operator1ProductDetails.ContractId,
- ProductId = TestData.Operator1ProductDetails.ProductId,
- CustomerAccountNumber = TestData.CustomerAccountNumber,
- };
- var request = model.ToSaleTransactionRequest();
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(model.TransactionDateTime);
- request.DeviceIdentifier.ShouldBe(model.DeviceIdentifier);
- request.ApplicationVersion.ShouldBe(model.ApplicationVersion);
- request.TransactionNumber.ShouldBe(model.TransactionNumber);
- request.OperatorId.ShouldBe(model.OperatorId);
- request.ContractId.ShouldBe(model.ContractId);
- request.ProductId.ShouldBe(model.ProductId);
- request.AdditionalRequestMetaData.ContainsKey("CustomerAccountNumber").ShouldBeTrue();
- request.AdditionalRequestMetaData["CustomerAccountNumber"].ShouldBe(model.CustomerAccountNumber);
- request.AdditionalRequestMetaData.ContainsKey("PataPawaPostPaidMessageType").ShouldBeTrue();
- request.AdditionalRequestMetaData["PataPawaPostPaidMessageType"].ShouldBe("VerifyAccount");
- }
-
- [Fact]
- public void PerformBillPaymentGetMeterModel_ToSaleTransactionRequest_SaleTransactionRequestMessageIsCreated(){
- PerformBillPaymentGetMeterModel model = new PerformBillPaymentGetMeterModel{
- TransactionDateTime = TestData.TransactionDateTime,
- DeviceIdentifier = TestData.DeviceIdentifier,
- ApplicationVersion = TestData.ApplicationVersion,
- TransactionNumber = TestData.TransactionNumber,
- OperatorId = TestData.OperatorId1,
- ContractId = TestData.Operator1ProductDetails.ContractId,
- ProductId = TestData.Operator1ProductDetails.ProductId,
- MeterNumber = TestData.MeterNumber,
- };
- var request = model.ToSaleTransactionRequest();
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(model.TransactionDateTime);
- request.DeviceIdentifier.ShouldBe(model.DeviceIdentifier);
- request.ApplicationVersion.ShouldBe(model.ApplicationVersion);
- request.TransactionNumber.ShouldBe(model.TransactionNumber);
- request.OperatorId.ShouldBe(model.OperatorId);
- request.ContractId.ShouldBe(model.ContractId);
- request.ProductId.ShouldBe(model.ProductId);
- request.AdditionalRequestMetaData.ContainsKey("MeterNumber").ShouldBeTrue();
- request.AdditionalRequestMetaData["MeterNumber"].ShouldBe(model.MeterNumber);
- request.AdditionalRequestMetaData.ContainsKey("PataPawaPrePayMessageType").ShouldBeTrue();
- request.AdditionalRequestMetaData["PataPawaPrePayMessageType"].ShouldBe("meter");
- }
-
- [Fact]
- public void PerformBillPaymentMakePaymentModel_PrePayment_ToSaleTransactionRequest_SaleTransactionRequestMessageIsCreated(){
- PerformBillPaymentMakePaymentModel model = new PerformBillPaymentMakePaymentModel{
- TransactionDateTime = TestData.TransactionDateTime,
- DeviceIdentifier = TestData.DeviceIdentifier,
- ApplicationVersion = TestData.ApplicationVersion,
- TransactionNumber = TestData.TransactionNumber,
- OperatorId = TestData.OperatorId1,
- ContractId = TestData.Operator1ProductDetails.ContractId,
- ProductId = TestData.Operator1ProductDetails.ProductId,
- PaymentAmount = TestData.PaymentAmount,
- CustomerAccountNumber = TestData.CustomerAccountNumber,
- CustomerAccountName = TestData.CustomerAccountName,
- CustomerMobileNumber = TestData.CustomerMobileNumber,
- };
- var request = model.ToSaleTransactionRequest();
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(model.TransactionDateTime);
- request.DeviceIdentifier.ShouldBe(model.DeviceIdentifier);
- request.ApplicationVersion.ShouldBe(model.ApplicationVersion);
- request.TransactionNumber.ShouldBe(model.TransactionNumber);
- request.OperatorId.ShouldBe(model.OperatorId);
- request.ContractId.ShouldBe(model.ContractId);
- request.ProductId.ShouldBe(model.ProductId);
-
- request.AdditionalRequestMetaData.ContainsKey("MeterNumber").ShouldBeTrue();
- request.AdditionalRequestMetaData["MeterNumber"].ShouldBe(model.CustomerAccountNumber);
- request.AdditionalRequestMetaData.ContainsKey("CustomerName").ShouldBeTrue();
- request.AdditionalRequestMetaData["CustomerName"].ShouldBe(model.CustomerAccountName);
- request.AdditionalRequestMetaData.ContainsKey("MeterNumber").ShouldBeTrue();
- request.AdditionalRequestMetaData["MeterNumber"].ShouldBe(model.CustomerAccountNumber);
- request.AdditionalRequestMetaData.ContainsKey("Amount").ShouldBeTrue();
- request.AdditionalRequestMetaData["Amount"].ShouldBe(model.PaymentAmount.ToString());
- request.AdditionalRequestMetaData.ContainsKey("PataPawaPrePayMessageType").ShouldBeTrue();
- request.AdditionalRequestMetaData["PataPawaPrePayMessageType"].ShouldBe("vend");
- }
-
- [Fact]
- public void PerformBillPaymentMakePaymentModel_PostPayment_ToSaleTransactionRequest_SaleTransactionRequestMessageIsCreated(){
- PerformBillPaymentMakePaymentModel model = new PerformBillPaymentMakePaymentModel{
- TransactionDateTime = TestData.TransactionDateTime,
- DeviceIdentifier = TestData.DeviceIdentifier,
- ApplicationVersion = TestData.ApplicationVersion,
- TransactionNumber = TestData.TransactionNumber,
- OperatorId = TestData.OperatorId1,
- ContractId = TestData.Operator1ProductDetails.ContractId,
- ProductId = TestData.Operator1ProductDetails.ProductId,
- PaymentAmount = TestData.PaymentAmount,
- CustomerAccountNumber = TestData.CustomerAccountNumber,
- CustomerAccountName = TestData.CustomerAccountName,
- CustomerMobileNumber = TestData.CustomerMobileNumber,
- PostPayment = true
- };
- var request = model.ToSaleTransactionRequest();
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(model.TransactionDateTime);
- request.DeviceIdentifier.ShouldBe(model.DeviceIdentifier);
- request.ApplicationVersion.ShouldBe(model.ApplicationVersion);
- request.TransactionNumber.ShouldBe(model.TransactionNumber);
- request.OperatorId.ShouldBe(model.OperatorId);
- request.ContractId.ShouldBe(model.ContractId);
- request.ProductId.ShouldBe(model.ProductId);
-
- request.AdditionalRequestMetaData.ContainsKey("CustomerAccountNumber").ShouldBeTrue();
- request.AdditionalRequestMetaData["CustomerAccountNumber"].ShouldBe(model.CustomerAccountNumber);
- request.AdditionalRequestMetaData.ContainsKey("CustomerName").ShouldBeTrue();
- request.AdditionalRequestMetaData["CustomerName"].ShouldBe(model.CustomerAccountName);
- request.AdditionalRequestMetaData.ContainsKey("MobileNumber").ShouldBeTrue();
- request.AdditionalRequestMetaData["MobileNumber"].ShouldBe(model.CustomerMobileNumber);
- request.AdditionalRequestMetaData.ContainsKey("Amount").ShouldBeTrue();
- request.AdditionalRequestMetaData["Amount"].ShouldBe(model.PaymentAmount.ToString());
- request.AdditionalRequestMetaData.ContainsKey("PataPawaPostPaidMessageType").ShouldBeTrue();
- request.AdditionalRequestMetaData["PataPawaPostPaidMessageType"].ShouldBe("ProcessBill");
- }
-
- [Theory]
- [InlineData("CustomerAccountNumber")]
- [InlineData("customeraccountnumber")]
- [InlineData("CUSTOMERACCOUNTNUMBER")]
- public void ExtractFieldFromMetadata_ExtractField_FieldIsExtracted(String fieldToExtract){
- Dictionary testMetaData = new Dictionary{
- { "CustomerAccountNumber", TestData.CustomerAccountNumber }
- };
-
- String extractedValue = testMetaData.ExtractFieldFromMetadata(fieldToExtract);
- extractedValue.ShouldBe(TestData.CustomerAccountNumber);
- }
-
- [Fact]
- public void ExtractFieldFromMetadata_ExtractField_KeyNotFound_DefaultValueReturned()
- {
- Dictionary testMetaData = new Dictionary{
- { "CustomerAccountNumber", TestData.CustomerAccountNumber }
- };
-
- String extractedValue = testMetaData.ExtractFieldFromMetadata("TestValue");
- extractedValue.ShouldBeNull();
- }
-
- [Fact]
- public void ExtractFieldFromMetadata_ExtractField_DictionaryValueNull_DefaultValueReturned()
- {
- Dictionary testMetaData = new Dictionary{
- { "CustomerAccountNumber", null }
- };
-
- String extractedValue = testMetaData.ExtractFieldFromMetadata("CustomerAccountNumber");
- extractedValue.ShouldBeNull();
- }
-
- [Fact]
- public void MetaData_ToBillDetails_BillDetailsReturned(){
- Dictionary testMetaData = new Dictionary{
- { "customerAccountName", TestData.BillDetails.AccountName },
- { "customerAccountNumber", TestData.BillDetails.AccountNumber },
- { "customerBillBalance", TestData.BillDetails.Balance },
- { "customerBillDueDate", TestData.BillDetails.DueDate }
- };
- BillDetails billDetails = testMetaData.ToBillDetails();
-
- billDetails.AccountName.ShouldBe(TestData.BillDetails.AccountName);
- billDetails.AccountNumber.ShouldBe(TestData.BillDetails.AccountNumber);
- billDetails.Balance.ShouldBe(TestData.BillDetails.Balance);
- billDetails.DueDate.ShouldBe(TestData.BillDetails.DueDate);
- }
-
- [Fact]
- public void MetaData_ToMeterDetails_MeterDetailsReturned()
- {
- Dictionary testMetaData = new Dictionary{
- { "pataPawaPrePaidCustomerName", TestData.MeterDetails.CustomerName }
- };
- MeterDetails meterDetails = testMetaData.ToMeterDetails(TestData.MeterNumber);
-
- meterDetails.CustomerName.ShouldBe(TestData.MeterDetails.CustomerName);
- meterDetails.MeterNumber.ShouldBe(TestData.MeterNumber);
- }
-
- [Theory]
- [InlineData("0000", true)]
- [InlineData("0001", false)]
- public void SaleTransactionResponseMessage_IsSuccessfulTransaction_ExpectedValueReturned(String responseCode, Boolean expectedValue){
- SaleTransactionResponseMessage responseMessage = new SaleTransactionResponseMessage{
- ResponseCode = responseCode
- };
- responseMessage.IsSuccessfulTransaction().ShouldBe(expectedValue);
- }
-
- [Theory]
- [InlineData("0000", true)]
- [InlineData("0001", false)]
- public void ReconciliationResponseMessage_IsSuccessfulTransaction_ExpectedValueReturned(String responseCode, Boolean expectedValue)
- {
- ReconciliationResponseMessage responseMessage = new ReconciliationResponseMessage
- {
- ResponseCode = responseCode
- };
- responseMessage.IsSuccessfulReconciliation().ShouldBe(expectedValue);
- }
- }
-
- public class ResultExtensionsTests{
- [Fact]
- public void FailureExtended_FailureResultReturned(){
- var result = ResultExtensions.FailureExtended("Message", new Exception("ExceptionsMessage"));
- result.IsFailed.ShouldBeTrue();
- result.Message.ShouldBe("Message");
- result.Errors.Single().ShouldBe("ExceptionsMessage");
- }
- }
-}
diff --git a/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/LoginRequestHandlerTests.cs b/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/LoginRequestHandlerTests.cs
deleted file mode 100644
index cec5db99e..000000000
--- a/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/LoginRequestHandlerTests.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-namespace TransactionMobile.Maui.BusinessLogic.Tests.RequestHandlerTests;
-
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-using Common;
-using Models;
-using Moq;
-using RequestHandlers;
-using Requests;
-using Services;
-using Shouldly;
-using SimpleResults;
-using Xunit;
-
-public class LoginRequestHandlerTests
-{
- private Mock AuthenticationService = null;
- private Mock ConfigurationService = null;
- private LoginRequestHandler LoginRequestHandler = null;
- private readonly Mock ApplicationCache;
- private Func AuthenticationServiceResolver;
- private Func ConfigurationServiceResolver;
-
- public LoginRequestHandlerTests() {
- this.AuthenticationService = new Mock();
- this.ConfigurationService= new Mock();
- this.ApplicationCache = new Mock();
- this.AuthenticationServiceResolver = _ =>
- {
- return this.AuthenticationService.Object;
- };
- this.ConfigurationServiceResolver = _ =>
- {
- return this.ConfigurationService.Object;
- };
-
-
- this.LoginRequestHandler = new LoginRequestHandler(this.AuthenticationServiceResolver, this.ConfigurationServiceResolver,this.ApplicationCache.Object);
- }
-
- [Fact]
- public async Task LoginRequestHandler_Handle_LoginRequest_IsHandled()
- {
- this.AuthenticationService.Setup(a => a.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.AccessToken));
- this.ConfigurationService.Setup(c => c.GetConfiguration(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new Configuration()));
-
- LoginRequest request = LoginRequest.Create(TestData.UserName,TestData.Password);
-
- Result result = await this.LoginRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.AccessToken.ShouldBe(TestData.Token);
- result.Data.ExpiryInMinutes.ShouldBe(TestData.TokenExpiryInMinutes);
- result.Data.RefreshToken.ShouldBe(TestData.RefreshToken);
- }
-
- [Fact]
- public async Task LoginRequestHandler_Handle_RefreshTokenRequest_IsHandled()
- {
- Mock authenticationService = new Mock();
- Func authenticationServiceResolver = new Func((param) =>
- {
- return authenticationService.Object;
- });
- Mock configurationService = new Mock();
- Func configurationServiceResolver = new Func((param) =>
- {
- return configurationService.Object;
- });
- this.AuthenticationService.Setup(a => a.RefreshAccessToken(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.AccessToken));
- this.ConfigurationService.Setup(c => c.GetConfiguration(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new Configuration()));
-
- RefreshTokenRequest request = RefreshTokenRequest.Create(TestData.RefreshToken);
-
- Result result = await this.LoginRequestHandler .Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.AccessToken.ShouldBe(TestData.Token);
- result.Data.ExpiryInMinutes.ShouldBe(TestData.TokenExpiryInMinutes);
- result.Data.RefreshToken.ShouldBe(TestData.RefreshToken);
- }
-
- [Fact]
- public async Task LoginRequestHandler_Handle_GetConfigurationRequest_IsHandled()
- {
- this.AuthenticationService.Setup(a => a.GetToken(It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(TestData.AccessToken));
- this.ConfigurationService.Setup(c => c.GetConfiguration(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new Configuration()));
-
- GetConfigurationRequest request = GetConfigurationRequest.Create(TestData.DeviceIdentifier);
-
- Result result = await this.LoginRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.ShouldNotBeNull();
- }
-}
\ No newline at end of file
diff --git a/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/MerchantRequestHandlerTests.cs b/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/MerchantRequestHandlerTests.cs
deleted file mode 100644
index 63678a8d0..000000000
--- a/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/MerchantRequestHandlerTests.cs
+++ /dev/null
@@ -1,147 +0,0 @@
-namespace TransactionMobile.Maui.BusinessLogic.Tests.RequestHandlerTests;
-
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Common;
-using Models;
-using Moq;
-using RequestHandlers;
-using Requests;
-using Services;
-using Shouldly;
-using SimpleResults;
-using Xunit;
-
-public class MerchantRequestHandlerTests
-{
- #region Fields
-
- private readonly Mock ApplicationCache;
-
- private readonly MerchantRequestHandler MerchantRequestHandler;
-
- private readonly Mock MerchantService;
-
- private Func MerchantServiceResolver;
- #endregion
-
- #region Constructors
-
- public MerchantRequestHandlerTests() {
- this.MerchantService = new Mock();
- this.ApplicationCache = new Mock();
- this.MerchantService = new Mock();
- this.MerchantServiceResolver = (param) => {
- return this.MerchantService.Object;
- };
- this.MerchantRequestHandler = new MerchantRequestHandler(this.MerchantServiceResolver, this.ApplicationCache.Object);
- }
-
- #endregion
-
- #region Methods
-
- [Fact]
- public async Task MerchantRequestHandler_GetContractProductsRequest_Handle_IsHandled() {
- this.MerchantService.Setup(m => m.GetContractProducts(It.IsAny()))
- .ReturnsAsync(Result.Success(TestData.ContractProductList));
-
- GetContractProductsRequest request = GetContractProductsRequest.Create();
-
- Result> result = await this.MerchantRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.Count.ShouldBe(TestData.ContractProductList.Count);
- }
-
- [Fact]
- public async Task MerchantRequestHandler_GetContractProductsRequest_Handle_CacheIsNull_IsHandled(){
- List products = null;
- this.ApplicationCache.Setup(a => a.GetContractProducts()).Returns(products);
-
- this.MerchantService.Setup(m => m.GetContractProducts(It.IsAny()))
- .ReturnsAsync(Result.Success(TestData.ContractProductList));
-
- GetContractProductsRequest request = GetContractProductsRequest.Create();
-
- Result> result = await this.MerchantRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.Count.ShouldBe(TestData.ContractProductList.Count);
- }
-
- [Fact]
- public async Task MerchantRequestHandler_GetContractProductsRequest_Handle_GetContractProductsFailed_IsHandled()
- {
- List products = new List();
- this.ApplicationCache.Setup(a => a.GetContractProducts()).Returns(products);
-
- this.MerchantService.Setup(m => m.GetContractProducts(It.IsAny()))
- .ReturnsAsync(Result.Failure("failed"));
-
- GetContractProductsRequest request = GetContractProductsRequest.Create();
-
- Result> result = await this.MerchantRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsFailed.ShouldBeTrue();
- }
-
- [Fact]
- public async Task MerchantRequestHandler_GetContractProductsRequest_Handle_FilterByType_IsHandled()
- {
- this.MerchantService.Setup(m => m.GetContractProducts(It.IsAny()))
- .ReturnsAsync(Result.Success(TestData.ContractProductList));
-
- GetContractProductsRequest request = GetContractProductsRequest.Create(ProductType.Voucher);
-
- Result> result = await this.MerchantRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.Count.ShouldBe(1);
- }
-
- [Fact]
- public async Task MerchantRequestHandler_GetContractProductsRequest_Handle_CacheIsEmpty_IsHandled()
- {
- List products = new List();
- this.ApplicationCache.Setup(a => a.GetContractProducts()).Returns(products);
-
- this.MerchantService.Setup(m => m.GetContractProducts(It.IsAny()))
- .ReturnsAsync(Result.Success(TestData.ContractProductList));
-
- GetContractProductsRequest request = GetContractProductsRequest.Create();
-
- Result> result = await this.MerchantRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.Count.ShouldBe(TestData.ContractProductList.Count);
- }
-
- [Fact]
- public async Task MerchantRequestHandler_GetMerchantBalanceRequest_Handle_IsHandled() {
- this.MerchantService.Setup(m => m.GetMerchantBalance(It.IsAny())).ReturnsAsync(Result.Success(TestData.MerchantBalance));
-
- GetMerchantBalanceRequest request = GetMerchantBalanceRequest.Create();
-
- Result result = await this.MerchantRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.ShouldBe(TestData.MerchantBalance);
- }
-
- [Fact]
- public async Task MerchantRequestHandler_GetMerchantDetailsRequest_Handle_IsHandled()
- {
- this.MerchantService.Setup(m => m.GetMerchantDetails(It.IsAny())).ReturnsAsync(Result.Success(TestData.MerchantDetailsModel));
-
- GetMerchantDetailsRequest request = GetMerchantDetailsRequest.Create();
-
- Result result = await this.MerchantRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- }
-
- #endregion
-}
\ No newline at end of file
diff --git a/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/SupportRequestHandlerTests.cs b/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/SupportRequestHandlerTests.cs
deleted file mode 100644
index 1a9dfccbd..000000000
--- a/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/SupportRequestHandlerTests.cs
+++ /dev/null
@@ -1,154 +0,0 @@
-namespace TransactionMobile.Maui.BusinessLogic.Tests.RequestHandlerTests;
-
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Database;
-using Microsoft.Data.Sqlite;
-using Moq;
-using RequestHandlers;
-using Requests;
-using Services;
-using Shouldly;
-using Xunit;
-
-public class SupportRequestHandlerTests
-{
-
- [Fact]
- public async Task SupportRequestHandlerTests_UploadLogsRequest_NoLogs_Handle_IsHandled()
- {
- Mock configurationService = new Mock();
- Func configurationServiceResolver = new Func((param) =>
- {
- return configurationService.Object;
- });
-
- Mock databaseContext = new Mock();
- databaseContext.Setup(d => d.GetLogMessages(It.IsAny(), It.IsAny())).ReturnsAsync(new List());
- Mock applicationCache = new Mock();
-
- SupportRequestHandler handler = new SupportRequestHandler(configurationServiceResolver, databaseContext.Object, applicationCache.Object);
-
- UploadLogsRequest request = UploadLogsRequest.Create(TestData.DeviceIdentifier);
-
- Boolean response = await handler.Handle(request, CancellationToken.None);
-
- response.ShouldBeTrue();
- }
-
- [Fact]
- public async Task SupportRequestHandlerTests_UploadLogsRequest_LogsToUpload_Only10Messages_Handle_IsHandled()
- {
- Mock configurationService = new Mock();
- Func configurationServiceResolver = new Func((param) =>
- {
- return configurationService.Object;
- });
- Mock databaseContext = new Mock();
- databaseContext.SetupSequence(d => d.GetLogMessages(It.IsAny(), It.IsAny())).ReturnsAsync(new List()
- {
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()}
- }).ReturnsAsync(new List());
-
- Mock applicationCache = new Mock();
-
- SupportRequestHandler handler = new SupportRequestHandler(configurationServiceResolver, databaseContext.Object, applicationCache.Object);
-
- UploadLogsRequest request = UploadLogsRequest.Create(TestData.DeviceIdentifier);
-
- Boolean response = await handler.Handle(request, CancellationToken.None);
-
- response.ShouldBeTrue();
- databaseContext.Verify(d => d.RemoveUploadedMessages(It.IsAny>()), Times.Once);
- }
-
- [Fact]
- public async Task SupportRequestHandlerTests_UploadLogsRequest_LogsToUpload_15Messages_Handle_IsHandled()
- {
- Mock configurationService = new Mock();
- Func configurationServiceResolver = new Func((param) =>
- {
- return configurationService.Object;
- });
- Mock databaseContext = new Mock();
- databaseContext.SetupSequence(d => d.GetLogMessages(It.IsAny(), It.IsAny())).ReturnsAsync(new List()
- {
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- }).ReturnsAsync(new List()
- {
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- new Database.LogMessage{LogLevel = LogLevel.Debug.ToString()},
- }).ReturnsAsync(new List());
-
- Mock applicationCache = new Mock();
-
- SupportRequestHandler handler = new SupportRequestHandler(configurationServiceResolver, databaseContext.Object, applicationCache.Object);
-
- UploadLogsRequest request = UploadLogsRequest.Create(TestData.DeviceIdentifier);
-
- Boolean response = await handler.Handle(request, CancellationToken.None);
-
- response.ShouldBeTrue();
- databaseContext.Verify(d => d.RemoveUploadedMessages(It.IsAny>()), Times.Exactly(2));
- }
-
- [Theory]
- [InlineData(true, 4)]
- [InlineData(false, 3)]
- public async Task SupportRequestHandlerTests_ViewLogsRequest_Handle_IsHandled(Boolean isTrainingMode, Int32 expectedNumberMessages)
- {
- Mock configurationService = new Mock();
- Func configurationServiceResolver = new Func((param) =>
- {
- return configurationService.Object;
- });
- Func logLevelFunc = new Func(() =>
- {
- return Database.LogLevel.Debug;
- });
- IDatabaseContext databaseContext = new DatabaseContext(":memory:", logLevelFunc);
- await databaseContext.InitialiseDatabase();
-
- List logMessages = new List();
- logMessages.Add(new LogMessage { LogLevel = LogLevel.Debug.ToString() });
- logMessages.Add(new LogMessage { LogLevel = LogLevel.Debug.ToString() });
- logMessages.Add(new LogMessage { LogLevel = LogLevel.Debug.ToString() });
- logMessages.Add(new LogMessage { LogLevel = LogLevel.Debug.ToString(), IsTrainingMode = true });
- logMessages.Add(new LogMessage { LogLevel = LogLevel.Debug.ToString(), IsTrainingMode = true });
- logMessages.Add(new LogMessage { LogLevel = LogLevel.Debug.ToString(), IsTrainingMode = true });
- logMessages.Add(new LogMessage { LogLevel = LogLevel.Debug.ToString(), IsTrainingMode = true });
- await databaseContext.InsertLogMessages(logMessages);
-
- Mock applicationCache = new Mock();
- applicationCache.Setup(s => s.GetUseTrainingMode()).Returns(isTrainingMode);
- SupportRequestHandler handler = new SupportRequestHandler(configurationServiceResolver, databaseContext, applicationCache.Object);
-
- ViewLogsRequest request = ViewLogsRequest.Create();
- List? result = await handler.Handle(request, CancellationToken.None);
-
- result.Count.ShouldBe(expectedNumberMessages);
- }
-}
\ No newline at end of file
diff --git a/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/TransactionRequestHandlerTests.cs b/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/TransactionRequestHandlerTests.cs
deleted file mode 100644
index 96590fc91..000000000
--- a/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestHandlerTests/TransactionRequestHandlerTests.cs
+++ /dev/null
@@ -1,373 +0,0 @@
-namespace TransactionMobile.Maui.BusinessLogic.Tests.RequestHandlerTests;
-
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Common;
-using Database;
-using Models;
-using Moq;
-using RequestHandlers;
-using Requests;
-using Services;
-using Shouldly;
-using SimpleResults;
-using TransactionProcessorACL.DataTransferObjects.Responses;
-using UIServices;
-using Xunit;
-
-public class TransactionRequestHandlerTests
-{
- private Mock TransactionService;
-
- private Mock DatabaseContext;
-
- private Mock ApplicationCache;
-
- private Mock ApplicationInfoService;
-
- private Mock DeviceService;
-
- private TransactionRequestHandler TransactionRequestHandler;
-
- private Func TransactionServiceResolver;
-
- public TransactionRequestHandlerTests() {
- this.TransactionService = new Mock();
- this.DatabaseContext = new Mock();
- this.ApplicationCache = new Mock();
- this.ApplicationInfoService = new Mock();
- this.DeviceService = new Mock();
- this.TransactionServiceResolver = _ =>
- {
- return this.TransactionService.Object;
- };
-
-
- this.TransactionRequestHandler = new TransactionRequestHandler(this.TransactionServiceResolver,
- this.DatabaseContext.Object,
- this.ApplicationCache.Object,
- this.ApplicationInfoService.Object,
- this.DeviceService.Object);
-
- }
-
- [Fact]
- public async Task TransactionRequestHandler_LogonTransactionRequest_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformLogon(It.IsAny(), It.IsAny())).ReturnsAsync(
- Result.Success(TestData.PerformLogonResponseModel));
-
- LogonTransactionRequest request = LogonTransactionRequest.Create(TestData.TransactionDateTime);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.IsSuccessful.ShouldBeTrue();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_LogonTransactionRequest_Handle_LogonFailed_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformLogon(It.IsAny(), It.IsAny())).ReturnsAsync(
- Result.Success(TestData.PerformLogonResponseFailedModel));
-
- LogonTransactionRequest request = LogonTransactionRequest.Create(TestData.TransactionDateTime);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeFalse();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformMobileTopupRequest_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformMobileTopup(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new PerformMobileTopupResponseModel
- {
- ResponseCode = "0000"
- }));
-
- PerformMobileTopupRequest request = PerformMobileTopupRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.CustomerAccountNumber,
- TestData.Operator1Product_100KES.Value,
- TestData.CustomerEmailAddress);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.IsSuccessful.ShouldBeTrue();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformMobileTopupRequest_Handle_TopupFailed_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformMobileTopup(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new PerformMobileTopupResponseModel
- {
- ResponseCode = "1000"
- }));
-
- PerformMobileTopupRequest request = PerformMobileTopupRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.CustomerAccountNumber,
- TestData.Operator1Product_100KES.Value,
- TestData.CustomerEmailAddress);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeFalse();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformVoucherIssueRequest_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformVoucherIssue(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new PerformVoucherIssueResponseModel
- {
- ResponseCode = "0000"
- }));
-
- PerformVoucherIssueRequest request = PerformVoucherIssueRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.RecipientMobileNumber,
- TestData.RecipientEmailAddress,
- TestData.Operator3Product_200KES.Value,
- TestData.CustomerEmailAddress);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.IsSuccessful.ShouldBeTrue();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformVoucherIssueRequest_Handle_VoucherIssueFailed_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformVoucherIssue(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new PerformVoucherIssueResponseModel
- {
- ResponseCode = "1000"
- }));
-
- PerformVoucherIssueRequest request = PerformVoucherIssueRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.RecipientMobileNumber,
- TestData.RecipientEmailAddress,
- TestData.Operator3Product_200KES.Value,
- TestData.CustomerEmailAddress);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeFalse();
- result.IsSuccess.ShouldBeFalse();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformBillPaymentGetAccountRequest_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformBillPaymentGetAccount(It.IsAny(), It.IsAny()))
- .ReturnsAsync(Result.Success(TestData.PerformBillPaymentGetAccountResponseModel));
-
- PerformBillPaymentGetAccountRequest request = PerformBillPaymentGetAccountRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.CustomerAccountNumber);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.IsSuccessful.ShouldBeTrue();
- result.Data.BillDetails.ShouldNotBeNull();
-
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformBillPaymentGetAccountRequest_GetAccountFailed_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformBillPaymentGetAccount(It.IsAny(), It.IsAny()))
- .ReturnsAsync(Result.Success(TestData.PerformBillPaymentGetAccountResponseModelFailed));
-
- PerformBillPaymentGetAccountRequest request = PerformBillPaymentGetAccountRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.CustomerAccountNumber);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.IsSuccessful.ShouldBeFalse();
- result.Data.BillDetails.ShouldBeNull();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformBillPaymentGetMeterRequest_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformBillPaymentGetMeter(It.IsAny(), It.IsAny()))
- .ReturnsAsync(Result.Success(TestData.PerformBillPaymentGetMeterResponseModel));
-
- PerformBillPaymentGetMeterRequest request = PerformBillPaymentGetMeterRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.CustomerAccountNumber);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.IsSuccessful.ShouldBeTrue();
- result.Data.MeterDetails.ShouldNotBeNull();
-
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformBillPaymentGetMeterRequest_GetMeterFailed_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformBillPaymentGetMeter(It.IsAny(), It.IsAny()))
- .ReturnsAsync(Result.Success(TestData.PerformBillPaymentGetMeterResponseModelFailed));
-
- PerformBillPaymentGetMeterRequest request = PerformBillPaymentGetMeterRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.CustomerAccountNumber);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.IsSuccessful.ShouldBeFalse();
- result.Data.MeterDetails.ShouldBeNull();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformBillPaymentMakePostPaymentRequest_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformBillPaymentMakePayment(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new PerformBillPaymentMakePaymentResponseModel
- {
- ResponseCode = "0000"
- }));
-
- PerformBillPaymentMakePostPaymentRequest request = PerformBillPaymentMakePostPaymentRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.CustomerAccountNumber,
- TestData.CustomerAccountName,
- TestData.CustomerMobileNumber,
- TestData.PaymentAmount);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.IsSuccessful.ShouldBeTrue();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformBillPaymentMakePrePaymentRequest_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformBillPaymentMakePayment(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new PerformBillPaymentMakePaymentResponseModel
- {
- ResponseCode = "0000"
- }));
-
- PerformBillPaymentMakePrePaymentRequest request = PerformBillPaymentMakePrePaymentRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.MeterNumber,
- TestData.CustomerAccountName,
- TestData.PaymentAmount);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.IsSuccessful.ShouldBeTrue();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformBillPaymentMakePostPaymentRequest_PaymentFailed_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformBillPaymentMakePayment(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new PerformBillPaymentMakePaymentResponseModel
- {
- ResponseCode = "0001"
- }));
-
- PerformBillPaymentMakePostPaymentRequest request = PerformBillPaymentMakePostPaymentRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.CustomerAccountNumber,
- TestData.CustomerAccountName,
- TestData.CustomerMobileNumber,
- TestData.PaymentAmount);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsFailed.ShouldBeTrue();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformBillPaymentMakePrePaymentRequest_PaymentFailed_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformBillPaymentMakePayment(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new PerformBillPaymentMakePaymentResponseModel
- {
- ResponseCode = "0001"
- }));
-
- PerformBillPaymentMakePrePaymentRequest request = PerformBillPaymentMakePrePaymentRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.MeterNumber,
- TestData.CustomerAccountName,
- TestData.PaymentAmount);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsFailed.ShouldBeTrue();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformReconciliationRequest_NoTransactions_Handle_IsHandled()
- {
- this.TransactionService.Setup(t => t.PerformReconciliation(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new PerformReconciliationResponseModel
- {
- ResponseCode = "0000"
- }));
- this.DatabaseContext.Setup(d => d.GetTransactions(It.IsAny())).ReturnsAsync(new List());
-
- PerformReconciliationRequest request = PerformReconciliationRequest.Create(TestData.TransactionDateTime,
- TestData.DeviceIdentifier,
- TestData.ApplicationVersion);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.IsSuccessful.ShouldBeTrue();
- }
-
- [Fact]
- public async Task TransactionRequestHandler_PerformReconciliationRequest_TransactionsStored_Handle_IsHandled() {
- this.TransactionService.Setup(t => t.PerformReconciliation(It.IsAny(), It.IsAny())).ReturnsAsync(Result.Success(new PerformReconciliationResponseModel
- {
- ResponseCode = "0000"
- }));
-
- this.DatabaseContext.Setup(d => d.GetTransactions(It.IsAny())).ReturnsAsync(TestData.StoredTransactions);
-
- PerformReconciliationRequest request = PerformReconciliationRequest.Create(TestData.TransactionDateTime, TestData.DeviceIdentifier, TestData.ApplicationVersion);
-
- Result result = await this.TransactionRequestHandler.Handle(request, CancellationToken.None);
-
- result.IsSuccess.ShouldBeTrue();
- result.Data.IsSuccessful.ShouldBeTrue();
- }
-}
diff --git a/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestTests/RequestTests.cs b/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestTests/RequestTests.cs
deleted file mode 100644
index 2bcf39105..000000000
--- a/archive/TransactionMobile.Maui.BusinessLogic.Tests/RequestTests/RequestTests.cs
+++ /dev/null
@@ -1,214 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace TransactionMobile.Maui.BusinessLogic.Tests.RequestTests;
-
-using Requests;
-using Shouldly;
-using Xunit;
-
-public class RequestTests
-{
- [Fact]
- public void GetContractProductsRequest_Create_IsCreated()
- {
- GetContractProductsRequest request = GetContractProductsRequest.Create();
-
- request.ShouldNotBeNull();
- request.ProductType.ShouldBeNull();
- }
-
- [Theory]
- [InlineData(Models.ProductType.BillPayment)]
- [InlineData(Models.ProductType.MobileWallet)]
- [InlineData(Models.ProductType.MobileTopup)]
- [InlineData(Models.ProductType.Voucher)]
- public void GetContractProductsRequest_Create_WithProductType_IsCreated(Models.ProductType productType)
- {
- GetContractProductsRequest request = GetContractProductsRequest.Create(productType);
-
- request.ShouldNotBeNull();
- request.ProductType.ShouldBe(productType);
- }
-
- [Fact]
- public void GetMerchantBalanceRequest_Create_IsCreated()
- {
- GetMerchantBalanceRequest request = GetMerchantBalanceRequest.Create();
-
- request.ShouldNotBeNull();
- }
-
- [Fact]
- public void LoginRequest_Create_IsCreated()
- {
- LoginRequest request = LoginRequest.Create(TestData.UserName,
- TestData.Password);
-
- request.ShouldNotBeNull();
- request.UserName.ShouldBe(TestData.UserName);
- request.Password.ShouldBe(TestData.Password);
- }
-
- [Fact]
- public void RefreshTokenRequest_Create_IsCreated()
- {
- RefreshTokenRequest request = RefreshTokenRequest.Create(TestData.RefreshToken);
-
- request.ShouldNotBeNull();
- request.RefreshToken.ShouldBe(TestData.RefreshToken);
- }
-
- [Fact]
- public void LogonTransactionRequest_Create_IsCreated()
- {
- LogonTransactionRequest request = LogonTransactionRequest.Create(TestData.TransactionDateTime);
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(TestData.TransactionDateTime);
- }
-
- [Fact]
- public void PerformMobileTopupRequest_Create_IsCreated()
- {
- PerformMobileTopupRequest request = PerformMobileTopupRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId1ContractId,
- TestData.Operator1Product_100KES.ProductId,
- TestData.OperatorId1,
- TestData.CustomerAccountNumber,
- TestData.Operator1Product_100KES.Value,
- TestData.CustomerEmailAddress);
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(TestData.TransactionDateTime);
- request.ContractId.ShouldBe(TestData.OperatorId1ContractId);
- request.ProductId.ShouldBe(TestData.Operator1Product_100KES.ProductId);
- request.OperatorId.ShouldBe(TestData.OperatorId1);
- request.CustomerAccountNumber.ShouldBe(TestData.CustomerAccountNumber);
- request.TopupAmount.ShouldBe(TestData.Operator1Product_100KES.Value);
- request.CustomerEmailAddress.ShouldBe(TestData.CustomerEmailAddress);
- }
-
- [Fact]
- public void PerformVoucherIssueRequest_Create_IsCreated()
- {
- PerformVoucherIssueRequest request = PerformVoucherIssueRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.RecipientMobileNumber,
- TestData.RecipientEmailAddress,
- TestData.Operator3Product_200KES.Value,
- TestData.CustomerEmailAddress);
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(TestData.TransactionDateTime);
- request.ContractId.ShouldBe(TestData.OperatorId3ContractId);
- request.ProductId.ShouldBe(TestData.Operator3Product_200KES.ProductId);
- request.OperatorId.ShouldBe(TestData.OperatorId3);
- request.RecipientMobileNumber.ShouldBe(TestData.RecipientMobileNumber);
- request.RecipientEmailAddress.ShouldBe(TestData.RecipientEmailAddress);
- request.VoucherAmount.ShouldBe(TestData.Operator3Product_200KES.Value);
- request.CustomerEmailAddress.ShouldBe(TestData.CustomerEmailAddress);
- }
-
- [Fact]
- public void PerformBillPaymentMakePostPaymentRequest_Create_IsCreated() {
- PerformBillPaymentMakePostPaymentRequest request = PerformBillPaymentMakePostPaymentRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.CustomerAccountNumber,
- TestData.CustomerAccountName,
- TestData.CustomerMobileNumber,
- TestData.PaymentAmount);
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(TestData.TransactionDateTime);
- request.ContractId.ShouldBe(TestData.OperatorId3ContractId);
- request.ProductId.ShouldBe(TestData.Operator3Product_200KES.ProductId);
- request.OperatorId.ShouldBe(TestData.OperatorId3);
- request.CustomerAccountNumber.ShouldBe(TestData.CustomerAccountNumber);
- request.CustomerAccountName.ShouldBe(TestData.CustomerAccountName);
- request.CustomerMobileNumber.ShouldBe(TestData.CustomerMobileNumber);
- request.PaymentAmount.ShouldBe(TestData.PaymentAmount);
- }
-
- [Fact]
- public void PerformBillPaymentMakePaymentRequest_Create_IsCreated()
- {
- PerformBillPaymentMakePrePaymentRequest request = PerformBillPaymentMakePrePaymentRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.MeterNumber,
- TestData.CustomerAccountName,
- TestData.PaymentAmount);
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(TestData.TransactionDateTime);
- request.ContractId.ShouldBe(TestData.OperatorId3ContractId);
- request.ProductId.ShouldBe(TestData.Operator3Product_200KES.ProductId);
- request.OperatorId.ShouldBe(TestData.OperatorId3);
- request.MeterNumber.ShouldBe(TestData.MeterNumber);
- request.CustomerAccountName.ShouldBe(TestData.CustomerAccountName);
- request.PaymentAmount.ShouldBe(TestData.PaymentAmount);
- }
-
- [Fact]
- public void PerformBillPaymentGetAccountRequest_Create_IsCreated() {
- PerformBillPaymentGetAccountRequest request = PerformBillPaymentGetAccountRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.CustomerAccountNumber);
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(TestData.TransactionDateTime);
- request.ContractId.ShouldBe(TestData.OperatorId3ContractId);
- request.ProductId.ShouldBe(TestData.Operator3Product_200KES.ProductId);
- request.OperatorId.ShouldBe(TestData.OperatorId3);
- request.CustomerAccountNumber.ShouldBe(TestData.CustomerAccountNumber);
- }
-
- [Fact]
- public void PerformReconciliationRequest_Create_IsCreated()
- {
- PerformReconciliationRequest request = PerformReconciliationRequest.Create(TestData.TransactionDateTime,TestData.DeviceIdentifier,
- TestData.ApplicationVersion);
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(TestData.TransactionDateTime);
- request.DeviceIdentifier.ShouldBe(TestData.DeviceIdentifier);
- request.ApplicationVersion.ShouldBe(TestData.ApplicationVersion);
- }
-
- [Fact]
- public void UploadLogsRequest_Create_IsCreated()
- {
- UploadLogsRequest request = UploadLogsRequest.Create(TestData.DeviceIdentifier);
-
- request.ShouldNotBeNull();
- request.DeviceIdentifier.ShouldBe(TestData.DeviceIdentifier);
- }
-
- [Fact]
- public void PerformBillPaymentGetMeterRequest_Create_IsCreated(){
- PerformBillPaymentGetMeterRequest request = PerformBillPaymentGetMeterRequest.Create(TestData.TransactionDateTime,
- TestData.OperatorId3ContractId,
- TestData.Operator3Product_200KES.ProductId,
- TestData.OperatorId3,
- TestData.CustomerAccountNumber);
-
- request.ShouldNotBeNull();
- request.TransactionDateTime.ShouldBe(TestData.TransactionDateTime);
- request.ContractId.ShouldBe(TestData.OperatorId3ContractId);
- request.ProductId.ShouldBe(TestData.Operator3Product_200KES.ProductId);
- request.OperatorId.ShouldBe(TestData.OperatorId3);
- request.MeterNumber.ShouldBe(TestData.CustomerAccountNumber);
-
- }
-}
\ No newline at end of file
diff --git a/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/AuthenticationServiceTests.cs b/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/AuthenticationServiceTests.cs
deleted file mode 100644
index 032cce9d8..000000000
--- a/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/AuthenticationServiceTests.cs
+++ /dev/null
@@ -1,97 +0,0 @@
-using System;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace TransactionMobile.Maui.BusinessLogic.Tests.ServicesTests
-{
- using System.Threading;
- using Logging;
- using Models;
- using Moq;
- using SecurityService.Client;
- using SecurityService.DataTransferObjects.Responses;
- using Services;
- using Shouldly;
- using SimpleResults;
- using Xunit;
-
- public class AuthenticationServiceTests{
- private readonly IAuthenticationService AuthenticationService;
-
- private readonly Mock SecurityServiceClient;
-
- private readonly Mock ApplicationCache;
- public AuthenticationServiceTests(){
- Logger.Initialise(new NullLogger());
- this.SecurityServiceClient = new Mock();
- this.ApplicationCache = new Mock();
- this.AuthenticationService = new AuthenticationService(this.SecurityServiceClient.Object,
- this.ApplicationCache.Object);
-
- // Standard cache mocking
- this.ApplicationCache.Setup(a => a.GetConfiguration()).Returns(new Configuration());
-
- }
-
- [Fact]
- public async Task AuthenticationService_GetToken_TokenReturned(){
- this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TokenResponse.Create(TestData.Token, TestData.RefreshToken, TestData.TokenExpiryInMinutes));
-
- Result token = await this.AuthenticationService.GetToken(TestData.UserName, TestData.Password, CancellationToken.None);
- token.IsSuccess.ShouldBeTrue();
- token.Data.AccessToken.ShouldBe(TestData.Token);
- token.Data.RefreshToken.ShouldBe(TestData.RefreshToken);
- token.Data.ExpiryInMinutes.ShouldBe(TestData.TokenExpiryInMinutes);
- }
-
- [Fact]
- public async Task AuthenticationService_GetToken_SecurityClientFailed_TokenNotReturned()
- {
- this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure());
-
- Result token = await this.AuthenticationService.GetToken(TestData.UserName, TestData.Password, CancellationToken.None);
- token.IsFailed.ShouldBeTrue();
- }
-
- [Fact]
- public async Task AuthenticationService_GetToken_SecurityClientThrowsException_TokenNotReturned()
- {
- this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new Exception());
-
- Result token = await this.AuthenticationService.GetToken(TestData.UserName, TestData.Password, CancellationToken.None);
- token.IsFailed.ShouldBeTrue();
- }
-
- [Fact]
- public async Task AuthenticationService_RefreshAccessToken_TokenReturned()
- {
- this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(TokenResponse.Create(TestData.Token, TestData.RefreshToken, TestData.TokenExpiryInMinutes));
-
- Result token = await this.AuthenticationService.RefreshAccessToken(TestData.RefreshToken, CancellationToken.None);
- token.IsSuccess.ShouldBeTrue();
- token.Data.AccessToken.ShouldBe(TestData.Token);
- token.Data.RefreshToken.ShouldBe(TestData.RefreshToken);
- token.Data.ExpiryInMinutes.ShouldBe(TestData.TokenExpiryInMinutes);
- }
-
- [Fact]
- public async Task AuthenticationService_RefreshAccessToken_SecurityClientFailed_TokenNotReturned()
- {
- this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ReturnsAsync(Result.Failure());
-
- Result token = await this.AuthenticationService.RefreshAccessToken(TestData.RefreshToken, CancellationToken.None);
-
- token.IsFailed.ShouldBeTrue();
- }
-
- [Fact]
- public async Task AuthenticationService_RefreshAccessToken_SecurityClientThrowsException_TokenNotReturned()
- {
- this.SecurityServiceClient.Setup(s => s.GetToken(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())).ThrowsAsync(new Exception());
-
- Result token = await this.AuthenticationService.RefreshAccessToken(TestData.RefreshToken, CancellationToken.None);
-
- token.IsFailed.ShouldBeTrue();
- }
- }
-}
diff --git a/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/ConfigurationServiceTests.cs b/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/ConfigurationServiceTests.cs
deleted file mode 100644
index 17d36968a..000000000
--- a/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/ConfigurationServiceTests.cs
+++ /dev/null
@@ -1,134 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace TransactionMobile.Maui.BusinessLogic.Tests.ServicesTests
-{
- using System.Net;
- using System.Net.Http;
- using System.Threading;
- using Logging;
- using Models;
- using Newtonsoft.Json;
- using RichardSzalay.MockHttp;
- using Services;
- using Services.DataTransferObjects;
- using Shouldly;
- using Xunit;
-
- public class ConfigurationServiceTests{
- private MockHttpMessageHandler MockHttpMessageHandler;
-
- private Func BaseAddressResolver;
-
- private IConfigurationService ConfigurationService;
- public ConfigurationServiceTests(){
- this.MockHttpMessageHandler = new MockHttpMessageHandler();
- this.BaseAddressResolver = (s) => $"http://localhost";
- this.ConfigurationService = new ConfigurationService(this.BaseAddressResolver, this.MockHttpMessageHandler.ToHttpClient());
- }
-
- [Theory]
- [InlineData(LoggingLevel.Debug, LogLevel.Debug)]
- [InlineData(LoggingLevel.Error, LogLevel.Error)]
- [InlineData(LoggingLevel.Fatal, LogLevel.Fatal)]
- [InlineData(LoggingLevel.Information, LogLevel.Info)]
- [InlineData(LoggingLevel.Trace, LogLevel.Trace)]
- [InlineData(LoggingLevel.Warning, LogLevel.Warn)]
- [InlineData((LoggingLevel)99, LogLevel.Info)]
-
- public async Task ConfigurationService_GetConfiguration_ResultSuccess_And_ConfigReturned(LoggingLevel configLoggingLevel, LogLevel expectedLogLevel)
- {
-
- ConfigurationResponse expectedConfiguration = new ConfigurationResponse
- {
- ClientId = "clientId",
- ClientSecret = Guid.NewGuid().ToString(),
- EnableAutoUpdates = false,
- HostAddresses = new List{
- new HostAddress{
- ServiceType = ServiceType.TransactionProcessor,
- Uri = "http://localhost:5001"
- },
- new HostAddress{
- ServiceType = ServiceType.Security,
- Uri = "http://localhost:5001"
- },
- new HostAddress{
- ServiceType = ServiceType.TransactionProcessorAcl,
- Uri = "http://localhost:5003"
- }
- },
- ApplicationCentreConfiguration = new ApplicationCentreConfiguration{
- AndroidKey = "Android",
- MacosKey = "MacOS",
- WindowsKey = "Windows",
- IosKey = "iOS",
- ApplicationId = "ApplicationId"
- },
- DeviceIdentifier = TestData.DeviceIdentifier,
- LogLevel = configLoggingLevel,
- Id = Guid.NewGuid().ToString(),
- };
- Logger.Initialise(new NullLogger());
-
- this.MockHttpMessageHandler.When($"http://localhost/api/transactionmobileconfiguration/{TestData.DeviceIdentifier}")
- .Respond("application/json", JsonConvert.SerializeObject(expectedConfiguration)); // Respond with JSON
-
- var configurationResult = await ConfigurationService.GetConfiguration(TestData.DeviceIdentifier, CancellationToken.None);
- configurationResult.IsSuccess.ShouldBeTrue();
- configurationResult.Data.ShouldNotBeNull();
- configurationResult.Data.ClientSecret.ShouldBe(expectedConfiguration.ClientSecret);
- configurationResult.Data.ClientId.ShouldBe(expectedConfiguration.ClientId);
- configurationResult.Data.EnableAutoUpdates.ShouldBe(expectedConfiguration.EnableAutoUpdates);
- configurationResult.Data.TransactionProcessorUri.ShouldBe(expectedConfiguration.HostAddresses.Single(s => s.ServiceType == ServiceType.TransactionProcessor).Uri);
- configurationResult.Data.SecurityServiceUri.ShouldBe(expectedConfiguration.HostAddresses.Single(s => s.ServiceType == ServiceType.Security).Uri);
- configurationResult.Data.TransactionProcessorAclUri.ShouldBe(expectedConfiguration.HostAddresses.Single(s => s.ServiceType == ServiceType.TransactionProcessorAcl).Uri);
- configurationResult.Data.LogLevel.ShouldBe(expectedLogLevel);
- configurationResult.Data.AppCenterConfig.AndroidKey.ShouldBe(expectedConfiguration.ApplicationCentreConfiguration.AndroidKey);
- configurationResult.Data.AppCenterConfig.MacOSKey.ShouldBe(expectedConfiguration.ApplicationCentreConfiguration.MacosKey);
- configurationResult.Data.AppCenterConfig.WindowsKey.ShouldBe(expectedConfiguration.ApplicationCentreConfiguration.WindowsKey);
- configurationResult.Data.AppCenterConfig.iOSKey.ShouldBe(expectedConfiguration.ApplicationCentreConfiguration.IosKey);
- }
-
- [Fact]
- public async Task ConfigurationService_GetConfiguration_FailedHttpCall_ResultFailed()
- {
- Logger.Initialise(new NullLogger());
-
- this.MockHttpMessageHandler.When($"http://localhost/api/transactionmobileconfiguration/{TestData.DeviceIdentifier}")
- .Respond(req => new HttpResponseMessage(HttpStatusCode.BadRequest));
-
- var configurationResult = await ConfigurationService.GetConfiguration(TestData.DeviceIdentifier, CancellationToken.None);
- configurationResult.IsFailed.ShouldBeTrue();
- }
-
- [Fact]
- public async Task ConfigurationService_GetConfiguration_FailedHttpCall_NotFound_ResultFailed()
- {
- Logger.Initialise(new NullLogger());
-
- this.MockHttpMessageHandler.When($"http://localhost/api/transactionmobileconfiguration/{TestData.DeviceIdentifier}")
- .Respond(req => new HttpResponseMessage(HttpStatusCode.NotFound));
-
- var configurationResult = await ConfigurationService.GetConfiguration(TestData.DeviceIdentifier, CancellationToken.None);
- configurationResult.IsFailed.ShouldBeTrue();
- }
-
- [Fact]
- public async Task ConfigurationService_PostDiagnosticLogs_ResultSuccess()
- {
- Logger.Initialise(new NullLogger());
-
- this.MockHttpMessageHandler.When($"http://localhost/transactionmobilelogging/{TestData.DeviceIdentifier}")
- .Respond(req => new HttpResponseMessage(HttpStatusCode.OK));
-
- Should.NotThrow(async () => {
- await ConfigurationService.PostDiagnosticLogs(TestData.DeviceIdentifier, null, CancellationToken.None);
- });
- }
-
- }
-}
diff --git a/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/MerchantServiceTests.cs b/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/MerchantServiceTests.cs
deleted file mode 100644
index 4e7822cd2..000000000
--- a/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/MerchantServiceTests.cs
+++ /dev/null
@@ -1,192 +0,0 @@
-using Newtonsoft.Json;
-using System.Net;
-using TransactionMobile.Maui.BusinessLogic.UIServices;
-using TransactionProcessorACL.DataTransferObjects.Responses;
-
-namespace TransactionMobile.Maui.BusinessLogic.Tests.ServicesTests;
-
-using Logging;
-using Models;
-using Moq;
-using RichardSzalay.MockHttp;
-using Services;
-using Shouldly;
-using SimpleResults;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-using System.Linq;
-using System.Threading;
-using System.Threading.Tasks;
-using Xunit;
-
-public class MerchantServiceTests{
-
- private MockHttpMessageHandler MockHttpMessageHandler;
-
- private Func BaseAddressResolver;
-
- private readonly Mock ApplicationCache;
- private readonly Mock ApplicationInfoService;
-
- private readonly IMerchantService MerchantService;
-
- public MerchantServiceTests(){
- Logger.Initialise(new NullLogger());
- this.MockHttpMessageHandler = new MockHttpMessageHandler();
- this.BaseAddressResolver = (s) => $"http://localhost";
- this.ApplicationCache = new Mock();
- this.ApplicationInfoService = new Mock();
- this.ApplicationInfoService.Setup(a => a.VersionString).Returns("1.0.0");
- this.MerchantService = new MerchantService(this.BaseAddressResolver, this.MockHttpMessageHandler.ToHttpClient(),this.ApplicationCache.Object,
- this.ApplicationInfoService.Object);
-
- // Standard cache mocking here
- this.ApplicationCache.Setup(a => a.GetAccessToken()).Returns(TestData.AccessToken);
- }
-
- [Fact]
- public async Task MerchantService_GetContractProducts_ContractProductsAreReturned(){
-
- List contracts = new List();
- contracts.Add(new ContractResponse{
- ContractId = TestData.OperatorId1ContractId,
- EstateId = TestData.EstateId,
- Products = new List{
- new ContractProduct{
- ProductId = TestData.Operator1Product_100KES.ProductId,
- DisplayText = TestData.Operator1Product_100KES.ProductDisplayText,
- Name = TestData.Operator1Product_100KES.ProductDisplayText,
- ProductType = TransactionProcessorACL.DataTransferObjects.Responses.ProductType.MobileTopup,
- Value = TestData.Operator1Product_100KES.Value,
- },
- new ContractProduct{
- ProductId = TestData.Operator1Product_200KES.ProductId,
- DisplayText = TestData.Operator1Product_200KES.ProductDisplayText,
- Name = TestData.Operator1Product_200KES.ProductDisplayText,
- ProductType = TransactionProcessorACL.DataTransferObjects.Responses.ProductType.MobileTopup,
- Value = TestData.Operator1Product_200KES.Value,
- }
-
- }
- });
-
-
- this.MockHttpMessageHandler.When($"http://localhost/api/merchants/contracts?application_version=1.0.0")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(contracts))); // Respond with JSON
-
- var result = await this.MerchantService.GetContractProducts(CancellationToken.None);
- result.IsSuccess.ShouldBeTrue();
- result.Data.Count.ShouldBe(2);
- }
-
-
- [Fact]
- public async Task MerchantService_GetContractProducts_HttpCallFailed_FailureReturned(){
- this.MockHttpMessageHandler.When($"http://localhost/api/merchants/contracts?application_version=1.0.0")
- .Respond(HttpStatusCode.InternalServerError);
-
- Result> result = await this.MerchantService.GetContractProducts(CancellationToken.None);
- result.IsFailed.ShouldBeTrue();
- }
-
- [Fact]
- public async Task MerchantService_GetMerchantDetails_MerchantDetailsReturned(){
- MerchantResponse merchantResponse = new MerchantResponse{
- MerchantName = TestData.MerchantName,
- NextStatementDate = TestData.NextStatementDate,
- SettlementSchedule = SettlementSchedule.Immediate,
- Contacts = new List{
- new ContactResponse{
- ContactEmailAddress = TestData.ContactEmailAddress,
- ContactName = TestData.ContactName,
- ContactPhoneNumber = TestData.ContactMobileNumber
- }
- },
- Addresses = new List{
- new AddressResponse{
- AddressLine1 = TestData.AddressLine1,
- AddressLine2 = TestData.AddressLine2,
- AddressLine3 = TestData.AddressLine3,
- AddressLine4 = TestData.AddressLine4,
- PostalCode = TestData.PostalCode,
- Region = TestData.Region,
- Town = TestData.Town,
-
- }
- }
- };
-
- this.MockHttpMessageHandler.When($"http://localhost/api/merchants?application_version=1.0.0")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(merchantResponse))); // Respond with JSON
-
- Result merchantDetails = await this.MerchantService.GetMerchantDetails(CancellationToken.None);
- merchantDetails.IsSuccess.ShouldBeTrue();
- merchantDetails.Data.Address.AddressLine1.ShouldBe(merchantResponse.Addresses.First().AddressLine1);
- merchantDetails.Data.Address.AddressLine2.ShouldBe(merchantResponse.Addresses.First().AddressLine2);
- merchantDetails.Data.Address.AddressLine3.ShouldBe(merchantResponse.Addresses.First().AddressLine3);
- merchantDetails.Data.Address.AddressLine4.ShouldBe(merchantResponse.Addresses.First().AddressLine4);
- merchantDetails.Data.Address.PostalCode.ShouldBe(merchantResponse.Addresses.First().PostalCode);
- merchantDetails.Data.Address.Region.ShouldBe(merchantResponse.Addresses.First().Region);
- merchantDetails.Data.Address.Town.ShouldBe(merchantResponse.Addresses.First().Town);
- merchantDetails.Data.Contact.Name.ShouldBe(merchantResponse.Contacts.First().ContactName);
- merchantDetails.Data.Contact.EmailAddress.ShouldBe(merchantResponse.Contacts.First().ContactEmailAddress);
- merchantDetails.Data.Contact.MobileNumber.ShouldBe(merchantResponse.Contacts.First().ContactPhoneNumber);
- merchantDetails.Data.MerchantName.ShouldBe(merchantResponse.MerchantName);
- merchantDetails.Data.NextStatementDate.ShouldBe(merchantResponse.NextStatementDate);
- merchantDetails.Data.SettlementSchedule.ShouldBe(merchantResponse.SettlementSchedule.ToString());
- }
-
- [Fact]
- public async Task MerchantService_GetMerchantDetails_ResultFailed_FailedResultIsReturned()
- {
- this.MockHttpMessageHandler.When($"http://localhost/api/merchants?application_version=1.0.0")
- .Respond(HttpStatusCode.BadRequest);
-
- Result merchantDetails = await this.MerchantService.GetMerchantDetails(CancellationToken.None);
- merchantDetails.IsFailed.ShouldBeTrue();
- }
-
- [Fact]
- public async Task MerchantService_GetMerchantDetails_ExceptionThrown_FailedResultReturned(){
- this.MockHttpMessageHandler.When($"http://localhost/api/merchants?application_version=1.0.0")
- .Respond(HttpStatusCode.InternalServerError);
-
- Result merchantDetails = await this.MerchantService.GetMerchantDetails(CancellationToken.None);
- merchantDetails.IsSuccess.ShouldBeFalse();
- }
-
- [Theory]
- [InlineData("Description", "OperatorName", Models.ProductType.BillPayment, "OperatorName")]
- [InlineData("Description", "OperatorName", Models.ProductType.MobileTopup, "OperatorName")]
- [InlineData("Description", "OperatorName", Models.ProductType.Voucher, "Description")]
- public void GetOperatorName_CorrectNameReturned(String contractDescription, String operatorName, Models.ProductType productType, String expectedName){
- ContractResponse contractResponse = new ContractResponse{
- Description = contractDescription,
- OperatorName = operatorName
- };
- String result = Services.MerchantService.GetOperatorName(contractResponse, productType);
- result.ShouldBe(expectedName);
- }
-
- [Theory]
- [InlineData("Safaricom", Models.ProductType.MobileTopup)]
- [InlineData("Voucher", Models.ProductType.Voucher)]
- [InlineData("PataPawa PostPay", Models.ProductType.BillPayment)]
- [InlineData("PataPawa PrePay", Models.ProductType.BillPayment)]
- public void GetProductType_CorrectProductTypeReturned(String operatorName, Models.ProductType expectedProductType){
- Models.ProductType result = Services.MerchantService.GetProductType(operatorName);
- result.ShouldBe(expectedProductType);
- }
-
- [Theory]
- [InlineData("Safaricom", Models.ProductSubType.MobileTopup)]
- [InlineData("Voucher", Models.ProductSubType.Voucher)]
- [InlineData("PataPawa PostPay", Models.ProductSubType.BillPaymentPostPay)]
- [InlineData("PataPawa PrePay", Models.ProductSubType.BillPaymentPrePay)]
- public void GetProductSubType_CorrectProductSubTypeReturned(String operatorName, Models.ProductSubType expectedProductSubType)
- {
- Models.ProductSubType result = Services.MerchantService.GetProductSubType(operatorName);
- result.ShouldBe(expectedProductSubType);
- }
-}
\ No newline at end of file
diff --git a/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/TransactionServiceTests.cs b/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/TransactionServiceTests.cs
deleted file mode 100644
index 41b5d3a02..000000000
--- a/archive/TransactionMobile.Maui.BusinessLogic.Tests/ServicesTests/TransactionServiceTests.cs
+++ /dev/null
@@ -1,516 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace TransactionMobile.Maui.BusinessLogic.Tests.ServicesTests
-{
- using System.Net;
- using System.Net.Http;
- using System.Threading;
- using Logging;
- using Models;
- using Moq;
- using Newtonsoft.Json;
- using RichardSzalay.MockHttp;
- using Services;
- using Shouldly;
- using SimpleResults;
- using TransactionProcessorACL.DataTransferObjects.Responses;
- using Xunit;
-
- public class TransactionServiceTests{
-
- private MockHttpMessageHandler MockHttpMessageHandler;
-
- private Func BaseAddressResolver;
-
- private ITransactionService TransactionService;
-
- private Mock ApplicationCache;
-
- public TransactionServiceTests(){
- this.MockHttpMessageHandler = new MockHttpMessageHandler();
- this.BaseAddressResolver = (s) => $"http://localhost";
- this.ApplicationCache = new Mock();
- this.TransactionService = new TransactionService(this.BaseAddressResolver, this.MockHttpMessageHandler.ToHttpClient(), this.ApplicationCache.Object);
- this.ApplicationCache.Setup(s => s.GetAccessToken()).Returns(new TokenResponseModel(){
- AccessToken = "token"
- });
- Logger.Initialise(new Logging.NullLogger());
- }
-
- [Fact]
- public async Task TransactionService_PerformLogon_LogonPerformed(){
-
- PerformLogonRequestModel requestModel = new PerformLogonRequestModel{
- ApplicationVersion = TestData.ApplicationVersion,
- DeviceIdentifier = TestData.DeviceIdentifier,
- TransactionDateTime = TestData.TransactionDateTime,
- TransactionNumber = TestData.TransactionNumber
- };
-
- LogonTransactionResponseMessage expectedResponse = new LogonTransactionResponseMessage{
- ResponseMessage = TestData.ResponseMessage_Success,
- EstateId = TestData.EstateId,
- MerchantId = TestData.MerchantId,
- ResponseCode = TestData.ResponseCode_Success,
- TransactionId = TestData.TransactionId,
- AdditionalResponseMetaData = new Dictionary()
- };
-
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(expectedResponse))); // Respond with JSON
-
- Result performLogonResult = await this.TransactionService.PerformLogon(requestModel, CancellationToken.None);
-
- performLogonResult.IsSuccess.ShouldBeTrue();
- performLogonResult.Data.ShouldNotBeNull();
- performLogonResult.Data.EstateId.ShouldBe(expectedResponse.EstateId);
- performLogonResult.Data.MerchantId.ShouldBe(expectedResponse.MerchantId);
- performLogonResult.Data.ResponseCode.ShouldBe(expectedResponse.ResponseCode);
- performLogonResult.Data.ResponseMessage.ShouldBe(expectedResponse.ResponseMessage);
- performLogonResult.Data.IsSuccessful.ShouldBeTrue();
- }
-
- [Theory]
- [InlineData(HttpStatusCode.BadRequest)]
- [InlineData(HttpStatusCode.HttpVersionNotSupported)]
- public async Task TransactionService_PerformLogon_LogonFailed(HttpStatusCode statusCode){
-
- PerformLogonRequestModel requestModel = new PerformLogonRequestModel{
- ApplicationVersion = TestData.ApplicationVersion,
- DeviceIdentifier = TestData.DeviceIdentifier,
- TransactionDateTime = TestData.TransactionDateTime,
- TransactionNumber = TestData.TransactionNumber
- };
-
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond(req => new HttpResponseMessage(statusCode));
-
- Result performLogonResult = await this.TransactionService.PerformLogon(requestModel, CancellationToken.None);
-
- performLogonResult.IsFailed.ShouldBeTrue();
- }
-
- [Fact]
- public async Task TransactionService_PerformMobileTopup_MobileTopupPerformed(){
-
- PerformMobileTopupRequestModel requestModel = new PerformMobileTopupRequestModel{
- ApplicationVersion = TestData.ApplicationVersion,
- DeviceIdentifier = TestData.DeviceIdentifier,
- TransactionDateTime = TestData.TransactionDateTime,
- TransactionNumber = TestData.TransactionNumber,
- ContractId = TestData.Operator1ProductDetails.ContractId,
- CustomerAccountNumber = TestData.CustomerAccountNumber,
- CustomerEmailAddress = TestData.CustomerEmailAddress,
- OperatorId = TestData.OperatorId1,
- ProductId = TestData.Operator1ProductDetails.ProductId,
- TopupAmount = TestData.PaymentAmount
- };
-
- SaleTransactionResponseMessage expectedResponse = new SaleTransactionResponseMessage{
- ResponseMessage = TestData.ResponseMessage_Success,
- EstateId = TestData.EstateId,
- MerchantId = TestData.MerchantId,
- ResponseCode = TestData.ResponseCode_Success,
- TransactionId = TestData.TransactionId,
- AdditionalResponseMetaData = new Dictionary()
- };
-
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(expectedResponse))); // Respond with JSON
-
- Result performMobileTopupResult = await this.TransactionService.PerformMobileTopup(requestModel, CancellationToken.None);
-
- performMobileTopupResult.IsSuccess.ShouldBeTrue();
- performMobileTopupResult.Data.ShouldNotBeNull();
- performMobileTopupResult.Data.EstateId.ShouldBe(expectedResponse.EstateId);
- performMobileTopupResult.Data.MerchantId.ShouldBe(expectedResponse.MerchantId);
- performMobileTopupResult.Data.ResponseCode.ShouldBe(expectedResponse.ResponseCode);
- performMobileTopupResult.Data.ResponseMessage.ShouldBe(expectedResponse.ResponseMessage);
- performMobileTopupResult.Data.IsSuccessful.ShouldBeTrue();
- }
-
- [Fact]
- public async Task TransactionService_PerformVoucherIssue_MobileTopupFailed(){
-
- PerformMobileTopupRequestModel requestModel = new PerformMobileTopupRequestModel{
- ApplicationVersion = TestData.ApplicationVersion,
- DeviceIdentifier = TestData.DeviceIdentifier,
- TransactionDateTime = TestData.TransactionDateTime,
- TransactionNumber = TestData.TransactionNumber,
- ContractId = TestData.Operator1ProductDetails.ContractId,
- CustomerAccountNumber = TestData.CustomerAccountNumber,
- CustomerEmailAddress = TestData.CustomerEmailAddress,
- OperatorId = TestData.OperatorId1,
- ProductId = TestData.Operator1ProductDetails.ProductId,
- TopupAmount = TestData.PaymentAmount
- };
-
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond(req => new HttpResponseMessage(HttpStatusCode.BadRequest));
-
- Result