diff --git a/.github/workflows/android_e2e_tests.yml b/.github/workflows/android_e2e_tests.yml
index 7db2d2e34..974378f29 100644
--- a/.github/workflows/android_e2e_tests.yml
+++ b/.github/workflows/android_e2e_tests.yml
@@ -12,11 +12,6 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v2
- - name: Set up .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '9.0.x'
-
- name: Set up JDK
uses: actions/setup-java@v3
with:
@@ -48,7 +43,7 @@ jobs:
# Accept licenses and install required components
yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
# Install Android API level 35 and necessary system images
- $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-35" "system-images;android-35;google_apis;x86_64"
+ $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-36" "system-images;android-36;google_apis;x86_64"
# Export paths for future steps
echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
@@ -59,11 +54,11 @@ jobs:
uses: actions/cache@v3
with:
path: ~/.android/avd
- key: android-emulator-x86-${{ runner.os }}-android-35
+ key: android-emulator-x86-${{ runner.os }}-android-36
- name: Create Android Emulator (x86)
run: |
- echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-35;google_apis;x86_64" --device "pixel_4"
+ echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-36;google_apis;x86_64" --device "pixel_4"
- name: List AVDs
run: avdmanager list avd
@@ -124,7 +119,7 @@ jobs:
- name: Install Android Build Tools
run: |
echo "Installing Android Build Tools..."
- sdkmanager "build-tools;35.0.0" # Updated to use Android 34 build tools
+ sdkmanager "build-tools;36.0.0" # Updated to use Android 34 build tools
sdkmanager --update
- name: Install MAUI workloads
@@ -157,7 +152,7 @@ jobs:
run: dotnet restore TransactionProcessor.Mobile.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 TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net9.0-android -c Release --no-restore
+ run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net10.0-android -c Release --no-restore
- name: Run Android Navigation Tests
run: dotnet test TransactionProcessor.Mobile.UITests/TransactionProcessor.Mobile.UITests.csproj --filter "(Category=PRTest)&(Category=Android)" --no-restore
diff --git a/.github/workflows/android_navigation_tests.yml b/.github/workflows/android_navigation_tests.yml
index a2777d248..cdf470f3a 100644
--- a/.github/workflows/android_navigation_tests.yml
+++ b/.github/workflows/android_navigation_tests.yml
@@ -12,11 +12,6 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v2
- - name: Set up .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '9.0.x'
-
- name: Set up JDK
uses: actions/setup-java@v3
with:
@@ -48,7 +43,7 @@ jobs:
# Accept licenses and install required components
yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
# Install Android API level 35 and necessary system images
- $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-35" "system-images;android-35;google_apis;x86_64"
+ $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-36" "system-images;android-36;google_apis;x86_64"
# Export paths for future steps
echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
@@ -59,11 +54,11 @@ jobs:
uses: actions/cache@v3
with:
path: ~/.android/avd
- key: android-emulator-x86-${{ runner.os }}-android-35
+ key: android-emulator-x86-${{ runner.os }}-android-36
- name: Create Android Emulator (x86)
run: |
- echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-35;google_apis;x86_64" --device "pixel_4"
+ echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-36;google_apis;x86_64" --device "pixel_4"
- name: List AVDs
run: avdmanager list avd
@@ -124,7 +119,7 @@ jobs:
- name: Install Android Build Tools
run: |
echo "Installing Android Build Tools..."
- sdkmanager "build-tools;35.0.0" # Updated to use Android 35 build tools
+ sdkmanager "build-tools;36.0.0" # Updated to use Android 35 build tools
sdkmanager --update
- name: Install MAUI workloads
@@ -144,7 +139,7 @@ jobs:
run: dotnet restore TransactionProcessor.Mobile.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 TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net9.0-android -c Release --no-restore
+ run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net10.0-android -c Release --no-restore
- name: Run Android Navigation Tests
run: dotnet test TransactionProcessor.Mobile.UITests/TransactionProcessor.Mobile.UITests.csproj --filter "(Category=PRNavTest)&(Category=Android)" --no-restore
@@ -162,11 +157,6 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v2
- - name: Set up .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '9.0.x'
-
- name: Set up JDK
uses: actions/setup-java@v3
with:
@@ -198,7 +188,7 @@ jobs:
# Accept licenses and install required components
yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
# Install Android API level 35 and necessary system images
- $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-35" "system-images;android-35;google_apis;x86_64"
+ $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-36" "system-images;android-36;google_apis;x86_64"
# Export paths for future steps
echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
@@ -209,11 +199,11 @@ jobs:
uses: actions/cache@v3
with:
path: ~/.android/avd
- key: android-emulator-x86-${{ runner.os }}-android-35
+ key: android-emulator-x86-${{ runner.os }}-android-36
- name: Create Android Emulator (x86)
run: |
- echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-35;google_apis;x86_64" --device "pixel_4"
+ echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-36;google_apis;x86_64" --device "pixel_4"
- name: List AVDs
run: avdmanager list avd
@@ -274,7 +264,7 @@ jobs:
- name: Install Android Build Tools
run: |
echo "Installing Android Build Tools..."
- sdkmanager "build-tools;35.0.0" # Updated to use Android 35 build tools
+ sdkmanager "build-tools;36.0.0" # Updated to use Android 35 build tools
sdkmanager --update
- name: Install MAUI workloads
@@ -294,7 +284,7 @@ jobs:
run: dotnet restore TransactionProcessor.Mobile.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 TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net9.0-android -c Release --no-restore
+ run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net10.0-android -c Release --no-restore
- name: Run Android Navigation Tests
run: dotnet test TransactionProcessor.Mobile.UITests/TransactionProcessor.Mobile.UITests.csproj --filter "(Category=PRHWNavTest)&(Category=Android)" --no-restore
diff --git a/.github/workflows/ios_e2e_tests - selfhosted.yml b/.github/workflows/ios_e2e_tests - selfhosted.yml
deleted file mode 100644
index 87e606156..000000000
--- a/.github/workflows/ios_e2e_tests - selfhosted.yml
+++ /dev/null
@@ -1,207 +0,0 @@
-name: Build and Run iOS Navigation Tests - Self Hosted
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- software_navigation_tests_self_hosted:
- runs-on: [self-hosted, macOS]
- #env:
- # PLATFORM_VERSION: "18.5"
- # DEVICE_NAME: "iPhone 16"
- # 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: '9.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: 📱 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 "iPhone 16"
- # SIMULATOR_ID=$(xcrun simctl list | grep 'Booted' | awk -F '[()]' '{print $2}')
- # echo "SIMULATOR_ID=$SIMULATOR_ID"
- # echo "SIMULATOR_ID=$SIMULATOR_ID" >> $GITHUB_ENV
-
- # # Open the simulator UI so Appium doesn’t force-restart it later
- # open -Fn /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
-
- # # Wait a bit to ensure the UI is up
- # sleep 5
- - name: 🚀 Boot simulator
- run: |
- SIMULATOR_NAME="iPhone 16"
-
- # Check if the simulator is already booted
- BOOTED_ID=$(xcrun simctl list devices | grep "$SIMULATOR_NAME" | grep 'Booted' | awk -F '[()]' '{print $2}')
-
- if [ -n "$BOOTED_ID" ]; then
- echo "Simulator '$SIMULATOR_NAME' is already booted with ID: $BOOTED_ID"
- SIMULATOR_ID="$BOOTED_ID"
- else
- echo "Booting simulator '$SIMULATOR_NAME'..."
- SIMULATOR_ID=$(xcrun simctl list devices | grep "$SIMULATOR_NAME" | head -n 1 | awk -F '[()]' '{print $2}' | xargs)
- xcrun simctl boot "$SIMULATOR_ID"
- fi
-
- echo "SIMULATOR_ID=$SIMULATOR_ID"
- echo "SIMULATOR_ID=$SIMULATOR_ID" >> $GITHUB_ENV
-
-
- #- name: List available simulators
- # run: |
- # xcrun simctl list | grep $SIMULATOR_ID
-
- #- name: Build, verify, and deploy WebDriverAgent
- # run: |
- # set -euo pipefail
-
- # # Set up vars
- # WDA_DIR="/tmp/WebDriverAgent"
- # DERIVED_DATA="/Users/runner/Library/Developer/Xcode/DerivedData/WebDriverAgent"
- # #SIMULATOR_UDID="${{ env.UDID }}"
- # echo "Using simulator $SIMULATOR_ID"
-
- # # Clone WDA
- # echo "Cloning WebDriverAgent..."
- # git clone https://github.com/appium/WebDriverAgent.git "$WDA_DIR"
-
- # # Build WDA using xcodebuild without signing (safe for CI)
- # echo "Building WebDriverAgentRunner..."
- # xcodebuild -project "$WDA_DIR/WebDriverAgent.xcodeproj" \
- # -scheme WebDriverAgentRunner \
- # -destination "id=$SIMULATOR_ID" \
- # -derivedDataPath "/Users/runner/Library/Developer/Xcode/DerivedData/WebDriverAgent" \
- # CODE_SIGNING_ALLOWED=NO \
- # build-for-testing
-
- # # Verify build output
- # echo "Looking for WDA build output..."
- # WDA_APP=$(find "$DERIVED_DATA" -type d -name "WebDriverAgentRunner-Runner.app" | head -n 1)
- # if [ -z "$WDA_APP" ]; then
- # echo "::error ::Failed to locate built WebDriverAgentRunner-Runner.app"
- # exit 1
- # fi
- # echo "Found built WDA app at: $WDA_APP"
-
- # # Launch WDA via xcodebuild test-without-building (required for XCTest runners)
- # echo "Launching WebDriverAgent test runner on simulator..."
- # xcodebuild test-without-building \
- # -project "$WDA_DIR/WebDriverAgent.xcodeproj" \
- # -scheme WebDriverAgentRunner \
- # -destination "id=$SIMULATOR_ID" \
- # -derivedDataPath "$DERIVED_DATA" \
- # IPHONEOS_DEPLOYMENT_TARGET=18.0 \
- # GCC_TREAT_WARNINGS_AS_ERRORS=0 \
- # COMPILER_INDEX_STORE_ENABLE=NO \
- # > /tmp/wda-launch.log 2>&1 &
-
- # # Wait for WDA to be ready
- # echo "Waiting for WDA to be available on http://127.0.0.1:8100/status..."
-
- # for i in {1..30}; do
- # if curl --silent --fail http://127.0.0.1:8100/status | grep -q "state"; then
- # echo "✅ WDA is up and running."
- # exit 0
- # fi
- # echo "Waiting... ($i)"
- # sleep 2
- # done
-
- # echo "::error::WDA failed to start within timeout."
- # exit 1
-
- # echo "✅ WDA built, verified, installed, and launched successfully."
-
- - name: 🧪 Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- #- 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 TransactionProcessor.Mobile.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- #- name: Select Xcode 16.4
- # run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer
-
- #- name: Confirm Xcode version
- # run: xcodebuild -version
-
- #- name: Accept Xcode license
- # run: sudo xcodebuild -license accept
-
- - name: Build Code
- #run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net9.0-ios -c Release --no-restore
- #run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-ios -r iossimulator-arm64 /p:EnableAssemblyILStripping=false /p:EnableSymbolStrip=false /p:LinkMode=None
- run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-ios -r iossimulator-arm64 #/p:LinkMode=SdkOnly /p:EnableAssemblyILStripping=true /p:EnableSymbolStrip=true /p:Codesign=false /p:DebugSymbols=false /p:UseInterpreter=true
-
- # - name: List all files with full path
- # run: |
- # find /Users/runner/work/TransactionMobile/TransactionMobile/TransactionProcessor.Mobile/bin -type f
-
- - name: Run iOS Navigation Tests
- run: |
- #dotnet build TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj -c Debug --no-restore
- dotnet test TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj --filter "Category=iOSPRTest" --no-restore
- # dotnet tool install --global NUnit.ConsoleRunner.NetCore
- # nunit3-console TransactionProcessor.Mobile.UiTests/bin/Release/net9.0/TransactionProcessor.Mobile.UiTests.dll --where "(cat == PRNavTest && cat == iOS)"
-
- # - name: Run iOS Navigation Tests
- # run: |
- # # Install NUnit Console Runner tool
- # dotnet tool install --global NUnit.ConsoleRunner.NetCore
-
- # # Ensure the tool path is available in this step
- # export PATH="$PATH:$HOME/.dotnet/tools"
-
- # # Optional: clean + build test project if not already built
- # dotnet build TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj -c Release --no-restore
-
- # # Run the tests filtered by categories
- # nunit TransactionProcessor.Mobile.UiTests/bin/Release/net9.0/TransactionProcessor.Mobile.UiTests.dll --where "cat == PRNavTest && cat == iOS" --labels=All --result=TestResult-iOS.xml
-
- - name: Upload Appium Logs on Failure
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: ios-software_navigation_tests_appium
- path: appium.log
-
- # - name: Upload NUnit Test Results
- # uses: actions/upload-artifact@v4
- # with:
- # name: iOS-Test-Results
- # path: TestResult-iOS.xml
-
-
diff --git a/.github/workflows/ios_e2e_tests.yml b/.github/workflows/ios_e2e_tests.yml
deleted file mode 100644
index ca314f0e7..000000000
--- a/.github/workflows/ios_e2e_tests.yml
+++ /dev/null
@@ -1,189 +0,0 @@
-name: Build and Run iOS End to End Tests
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- end_to_end_tests:
- runs-on: macos-15
- env:
- PLATFORM_VERSION: "18.5"
- DEVICE_NAME: "iPhone 16"
- 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: '9.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: 📱 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"
- SIMULATOR_ID=$(xcrun simctl list | grep 'Booted' | awk -F '[()]' '{print $2}')
- echo "SIMULATOR_ID=$SIMULATOR_ID"
- echo "SIMULATOR_ID=$SIMULATOR_ID" >> $GITHUB_ENV
-
- # Open the simulator UI so Appium doesn’t force-restart it later
- open -Fn /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
-
- # Wait a bit to ensure the UI is up
- sleep 5
-
-
- - name: List available simulators
- run: |
- xcrun simctl list | grep $SIMULATOR_ID
-
- #- name: Build, verify, and deploy WebDriverAgent
- # run: |
- # set -euo pipefail
-
- # # Set up vars
- # WDA_DIR="/tmp/WebDriverAgent"
- # DERIVED_DATA="/Users/runner/Library/Developer/Xcode/DerivedData/WebDriverAgent"
- # #SIMULATOR_UDID="${{ env.UDID }}"
- # echo "Using simulator $SIMULATOR_ID"
-
- # # Clone WDA
- # echo "Cloning WebDriverAgent..."
- # git clone https://github.com/appium/WebDriverAgent.git "$WDA_DIR"
-
- # # Build WDA using xcodebuild without signing (safe for CI)
- # echo "Building WebDriverAgentRunner..."
- # xcodebuild -project "$WDA_DIR/WebDriverAgent.xcodeproj" \
- # -scheme WebDriverAgentRunner \
- # -destination "id=$SIMULATOR_ID" \
- # -derivedDataPath "/Users/runner/Library/Developer/Xcode/DerivedData/WebDriverAgent" \
- # CODE_SIGNING_ALLOWED=NO \
- # build-for-testing
-
- # # Verify build output
- # echo "Looking for WDA build output..."
- # WDA_APP=$(find "$DERIVED_DATA" -type d -name "WebDriverAgentRunner-Runner.app" | head -n 1)
- # if [ -z "$WDA_APP" ]; then
- # echo "::error ::Failed to locate built WebDriverAgentRunner-Runner.app"
- # exit 1
- # fi
- # echo "Found built WDA app at: $WDA_APP"
-
- # # Launch WDA via xcodebuild test-without-building (required for XCTest runners)
- # echo "Launching WebDriverAgent test runner on simulator..."
- # xcodebuild test-without-building \
- # -project "$WDA_DIR/WebDriverAgent.xcodeproj" \
- # -scheme WebDriverAgentRunner \
- # -destination "id=$SIMULATOR_ID" \
- # -derivedDataPath "$DERIVED_DATA" \
- # IPHONEOS_DEPLOYMENT_TARGET=18.0 \
- # GCC_TREAT_WARNINGS_AS_ERRORS=0 \
- # COMPILER_INDEX_STORE_ENABLE=NO \
- # > /tmp/wda-launch.log 2>&1 &
-
- # # Wait for WDA to be ready
- # echo "Waiting for WDA to be available on http://127.0.0.1:8100/status..."
-
- # for i in {1..30}; do
- # if curl --silent --fail http://127.0.0.1:8100/status | grep -q "state"; then
- # echo "✅ WDA is up and running."
- # exit 0
- # fi
- # echo "Waiting... ($i)"
- # sleep 2
- # done
-
- # echo "::error::WDA failed to start within timeout."
- # exit 1
-
- # echo "✅ WDA built, verified, installed, and launched successfully."
-
- - name: 🧪 Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- - 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 TransactionProcessor.Mobile.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- - name: Select Xcode 16.4
- run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer
-
- - name: Confirm Xcode version
- run: xcodebuild -version
-
- - name: Accept Xcode license
- run: sudo xcodebuild -license accept
-
- - name: Build Code
- #run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net9.0-ios -c Release --no-restore
- #run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-ios -r iossimulator-arm64 /p:EnableAssemblyILStripping=false /p:EnableSymbolStrip=false /p:LinkMode=None
- run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-ios -r iossimulator-arm64 #/p:LinkMode=SdkOnly /p:EnableAssemblyILStripping=true /p:EnableSymbolStrip=true /p:Codesign=false /p:DebugSymbols=false /p:UseInterpreter=true
-
- # - name: List all files with full path
- # run: |
- # find /Users/runner/work/TransactionMobile/TransactionMobile/TransactionProcessor.Mobile/bin -type f
-
- - name: Run iOS Navigation Tests
- run: |
- #dotnet build TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj -c Debug --no-restore
- dotnet test TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj --filter "Category=iOSPRTest" --no-restore
- # dotnet tool install --global NUnit.ConsoleRunner.NetCore
- # nunit3-console TransactionProcessor.Mobile.UiTests/bin/Release/net9.0/TransactionProcessor.Mobile.UiTests.dll --where "(cat == PRNavTest && cat == iOS)"
-
- # - name: Run iOS Navigation Tests
- # run: |
- # # Install NUnit Console Runner tool
- # dotnet tool install --global NUnit.ConsoleRunner.NetCore
-
- # # Ensure the tool path is available in this step
- # export PATH="$PATH:$HOME/.dotnet/tools"
-
- # # Optional: clean + build test project if not already built
- # dotnet build TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj -c Release --no-restore
-
- # # Run the tests filtered by categories
- # nunit TransactionProcessor.Mobile.UiTests/bin/Release/net9.0/TransactionProcessor.Mobile.UiTests.dll --where "cat == PRNavTest && cat == iOS" --labels=All --result=TestResult-iOS.xml
-
- - name: Upload Appium Logs on Failure
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: ios-e2e_tests_appium
- path: appium.log
-
- # - name: Upload NUnit Test Results
- # uses: actions/upload-artifact@v4
- # with:
- # name: iOS-Test-Results
- # path: TestResult-iOS.xml
-
-
diff --git a/.github/workflows/ios_navigation_tests - selfhosted.yml b/.github/workflows/ios_navigation_tests - selfhosted.yml
deleted file mode 100644
index 14bec459e..000000000
--- a/.github/workflows/ios_navigation_tests - selfhosted.yml
+++ /dev/null
@@ -1,207 +0,0 @@
-name: Build and Run iOS Navigation Tests - Self Hosted
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- software_navigation_tests_self_hosted:
- runs-on: [self-hosted, macOS]
- #env:
- # PLATFORM_VERSION: "18.5"
- # DEVICE_NAME: "iPhone 16"
- # 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: '9.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: 📱 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 "iPhone 16"
- # SIMULATOR_ID=$(xcrun simctl list | grep 'Booted' | awk -F '[()]' '{print $2}')
- # echo "SIMULATOR_ID=$SIMULATOR_ID"
- # echo "SIMULATOR_ID=$SIMULATOR_ID" >> $GITHUB_ENV
-
- # # Open the simulator UI so Appium doesn’t force-restart it later
- # open -Fn /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
-
- # # Wait a bit to ensure the UI is up
- # sleep 5
- - name: 🚀 Boot simulator
- run: |
- SIMULATOR_NAME="iPhone 16"
-
- # Check if the simulator is already booted
- BOOTED_ID=$(xcrun simctl list devices | grep "$SIMULATOR_NAME" | grep 'Booted' | awk -F '[()]' '{print $2}')
-
- if [ -n "$BOOTED_ID" ]; then
- echo "Simulator '$SIMULATOR_NAME' is already booted with ID: $BOOTED_ID"
- SIMULATOR_ID="$BOOTED_ID"
- else
- echo "Booting simulator '$SIMULATOR_NAME'..."
- SIMULATOR_ID=$(xcrun simctl list devices | grep "$SIMULATOR_NAME" | head -n 1 | awk -F '[()]' '{print $2}' | xargs)
- xcrun simctl boot "$SIMULATOR_ID"
- fi
-
- echo "SIMULATOR_ID=$SIMULATOR_ID"
- echo "SIMULATOR_ID=$SIMULATOR_ID" >> $GITHUB_ENV
-
-
- #- name: List available simulators
- # run: |
- # xcrun simctl list | grep $SIMULATOR_ID
-
- #- name: Build, verify, and deploy WebDriverAgent
- # run: |
- # set -euo pipefail
-
- # # Set up vars
- # WDA_DIR="/tmp/WebDriverAgent"
- # DERIVED_DATA="/Users/runner/Library/Developer/Xcode/DerivedData/WebDriverAgent"
- # #SIMULATOR_UDID="${{ env.UDID }}"
- # echo "Using simulator $SIMULATOR_ID"
-
- # # Clone WDA
- # echo "Cloning WebDriverAgent..."
- # git clone https://github.com/appium/WebDriverAgent.git "$WDA_DIR"
-
- # # Build WDA using xcodebuild without signing (safe for CI)
- # echo "Building WebDriverAgentRunner..."
- # xcodebuild -project "$WDA_DIR/WebDriverAgent.xcodeproj" \
- # -scheme WebDriverAgentRunner \
- # -destination "id=$SIMULATOR_ID" \
- # -derivedDataPath "/Users/runner/Library/Developer/Xcode/DerivedData/WebDriverAgent" \
- # CODE_SIGNING_ALLOWED=NO \
- # build-for-testing
-
- # # Verify build output
- # echo "Looking for WDA build output..."
- # WDA_APP=$(find "$DERIVED_DATA" -type d -name "WebDriverAgentRunner-Runner.app" | head -n 1)
- # if [ -z "$WDA_APP" ]; then
- # echo "::error ::Failed to locate built WebDriverAgentRunner-Runner.app"
- # exit 1
- # fi
- # echo "Found built WDA app at: $WDA_APP"
-
- # # Launch WDA via xcodebuild test-without-building (required for XCTest runners)
- # echo "Launching WebDriverAgent test runner on simulator..."
- # xcodebuild test-without-building \
- # -project "$WDA_DIR/WebDriverAgent.xcodeproj" \
- # -scheme WebDriverAgentRunner \
- # -destination "id=$SIMULATOR_ID" \
- # -derivedDataPath "$DERIVED_DATA" \
- # IPHONEOS_DEPLOYMENT_TARGET=18.0 \
- # GCC_TREAT_WARNINGS_AS_ERRORS=0 \
- # COMPILER_INDEX_STORE_ENABLE=NO \
- # > /tmp/wda-launch.log 2>&1 &
-
- # # Wait for WDA to be ready
- # echo "Waiting for WDA to be available on http://127.0.0.1:8100/status..."
-
- # for i in {1..30}; do
- # if curl --silent --fail http://127.0.0.1:8100/status | grep -q "state"; then
- # echo "✅ WDA is up and running."
- # exit 0
- # fi
- # echo "Waiting... ($i)"
- # sleep 2
- # done
-
- # echo "::error::WDA failed to start within timeout."
- # exit 1
-
- # echo "✅ WDA built, verified, installed, and launched successfully."
-
- - name: 🧪 Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- #- 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 TransactionProcessor.Mobile.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- #- name: Select Xcode 16.4
- # run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer
-
- #- name: Confirm Xcode version
- # run: xcodebuild -version
-
- #- name: Accept Xcode license
- # run: sudo xcodebuild -license accept
-
- - name: Build Code
- #run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net9.0-ios -c Release --no-restore
- #run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-ios -r iossimulator-arm64 /p:EnableAssemblyILStripping=false /p:EnableSymbolStrip=false /p:LinkMode=None
- run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-ios -r iossimulator-arm64 #/p:LinkMode=SdkOnly /p:EnableAssemblyILStripping=true /p:EnableSymbolStrip=true /p:Codesign=false /p:DebugSymbols=false /p:UseInterpreter=true
-
- # - name: List all files with full path
- # run: |
- # find /Users/runner/work/TransactionMobile/TransactionMobile/TransactionProcessor.Mobile/bin -type f
-
- - name: Run iOS Navigation Tests
- run: |
- #dotnet build TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj -c Debug --no-restore
- dotnet test TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj --filter "Category=PRNavTest" --no-restore
- # dotnet tool install --global NUnit.ConsoleRunner.NetCore
- # nunit3-console TransactionProcessor.Mobile.UiTests/bin/Release/net9.0/TransactionProcessor.Mobile.UiTests.dll --where "(cat == PRNavTest && cat == iOS)"
-
- # - name: Run iOS Navigation Tests
- # run: |
- # # Install NUnit Console Runner tool
- # dotnet tool install --global NUnit.ConsoleRunner.NetCore
-
- # # Ensure the tool path is available in this step
- # export PATH="$PATH:$HOME/.dotnet/tools"
-
- # # Optional: clean + build test project if not already built
- # dotnet build TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj -c Release --no-restore
-
- # # Run the tests filtered by categories
- # nunit TransactionProcessor.Mobile.UiTests/bin/Release/net9.0/TransactionProcessor.Mobile.UiTests.dll --where "cat == PRNavTest && cat == iOS" --labels=All --result=TestResult-iOS.xml
-
- - name: Upload Appium Logs on Failure
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: ios-software_navigation_tests_appium
- path: appium.log
-
- # - name: Upload NUnit Test Results
- # uses: actions/upload-artifact@v4
- # with:
- # name: iOS-Test-Results
- # path: TestResult-iOS.xml
-
-
diff --git a/.github/workflows/ios_navigation_tests.yml b/.github/workflows/ios_navigation_tests.yml
deleted file mode 100644
index c2fddbf4e..000000000
--- a/.github/workflows/ios_navigation_tests.yml
+++ /dev/null
@@ -1,189 +0,0 @@
-name: Build and Run iOS Navigation Tests
-
-on:
- pull_request:
- branches:
- - main
-
-jobs:
- software_navigation_tests:
- runs-on: macos-15
- env:
- PLATFORM_VERSION: "18.5"
- DEVICE_NAME: "iPhone 16"
- 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: '9.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: 📱 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"
- SIMULATOR_ID=$(xcrun simctl list | grep 'Booted' | awk -F '[()]' '{print $2}')
- echo "SIMULATOR_ID=$SIMULATOR_ID"
- echo "SIMULATOR_ID=$SIMULATOR_ID" >> $GITHUB_ENV
-
- # Open the simulator UI so Appium doesn’t force-restart it later
- open -Fn /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
-
- # Wait a bit to ensure the UI is up
- sleep 5
-
-
- - name: List available simulators
- run: |
- xcrun simctl list | grep $SIMULATOR_ID
-
- #- name: Build, verify, and deploy WebDriverAgent
- # run: |
- # set -euo pipefail
-
- # # Set up vars
- # WDA_DIR="/tmp/WebDriverAgent"
- # DERIVED_DATA="/Users/runner/Library/Developer/Xcode/DerivedData/WebDriverAgent"
- # #SIMULATOR_UDID="${{ env.UDID }}"
- # echo "Using simulator $SIMULATOR_ID"
-
- # # Clone WDA
- # echo "Cloning WebDriverAgent..."
- # git clone https://github.com/appium/WebDriverAgent.git "$WDA_DIR"
-
- # # Build WDA using xcodebuild without signing (safe for CI)
- # echo "Building WebDriverAgentRunner..."
- # xcodebuild -project "$WDA_DIR/WebDriverAgent.xcodeproj" \
- # -scheme WebDriverAgentRunner \
- # -destination "id=$SIMULATOR_ID" \
- # -derivedDataPath "/Users/runner/Library/Developer/Xcode/DerivedData/WebDriverAgent" \
- # CODE_SIGNING_ALLOWED=NO \
- # build-for-testing
-
- # # Verify build output
- # echo "Looking for WDA build output..."
- # WDA_APP=$(find "$DERIVED_DATA" -type d -name "WebDriverAgentRunner-Runner.app" | head -n 1)
- # if [ -z "$WDA_APP" ]; then
- # echo "::error ::Failed to locate built WebDriverAgentRunner-Runner.app"
- # exit 1
- # fi
- # echo "Found built WDA app at: $WDA_APP"
-
- # # Launch WDA via xcodebuild test-without-building (required for XCTest runners)
- # echo "Launching WebDriverAgent test runner on simulator..."
- # xcodebuild test-without-building \
- # -project "$WDA_DIR/WebDriverAgent.xcodeproj" \
- # -scheme WebDriverAgentRunner \
- # -destination "id=$SIMULATOR_ID" \
- # -derivedDataPath "$DERIVED_DATA" \
- # IPHONEOS_DEPLOYMENT_TARGET=18.0 \
- # GCC_TREAT_WARNINGS_AS_ERRORS=0 \
- # COMPILER_INDEX_STORE_ENABLE=NO \
- # > /tmp/wda-launch.log 2>&1 &
-
- # # Wait for WDA to be ready
- # echo "Waiting for WDA to be available on http://127.0.0.1:8100/status..."
-
- # for i in {1..30}; do
- # if curl --silent --fail http://127.0.0.1:8100/status | grep -q "state"; then
- # echo "✅ WDA is up and running."
- # exit 0
- # fi
- # echo "Waiting... ($i)"
- # sleep 2
- # done
-
- # echo "::error::WDA failed to start within timeout."
- # exit 1
-
- # echo "✅ WDA built, verified, installed, and launched successfully."
-
- - name: 🧪 Start Appium Server
- run: |
- nohup appium --log appium.log &
-
- - 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 TransactionProcessor.Mobile.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
-
- - name: Select Xcode 16.4
- run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer
-
- - name: Confirm Xcode version
- run: xcodebuild -version
-
- - name: Accept Xcode license
- run: sudo xcodebuild -license accept
-
- - name: Build Code
- #run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net9.0-ios -c Release --no-restore
- #run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-ios -r iossimulator-arm64 /p:EnableAssemblyILStripping=false /p:EnableSymbolStrip=false /p:LinkMode=None
- run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-ios -r iossimulator-arm64 #/p:LinkMode=SdkOnly /p:EnableAssemblyILStripping=true /p:EnableSymbolStrip=true /p:Codesign=false /p:DebugSymbols=false /p:UseInterpreter=true
-
- # - name: List all files with full path
- # run: |
- # find /Users/runner/work/TransactionMobile/TransactionMobile/TransactionProcessor.Mobile/bin -type f
-
- - name: Run iOS Navigation Tests
- run: |
- #dotnet build TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj -c Debug --no-restore
- dotnet test TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj --filter "Category=PRNavTest" --no-restore
- # dotnet tool install --global NUnit.ConsoleRunner.NetCore
- # nunit3-console TransactionProcessor.Mobile.UiTests/bin/Release/net9.0/TransactionProcessor.Mobile.UiTests.dll --where "(cat == PRNavTest && cat == iOS)"
-
- # - name: Run iOS Navigation Tests
- # run: |
- # # Install NUnit Console Runner tool
- # dotnet tool install --global NUnit.ConsoleRunner.NetCore
-
- # # Ensure the tool path is available in this step
- # export PATH="$PATH:$HOME/.dotnet/tools"
-
- # # Optional: clean + build test project if not already built
- # dotnet build TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj -c Release --no-restore
-
- # # Run the tests filtered by categories
- # nunit TransactionProcessor.Mobile.UiTests/bin/Release/net9.0/TransactionProcessor.Mobile.UiTests.dll --where "cat == PRNavTest && cat == iOS" --labels=All --result=TestResult-iOS.xml
-
- - name: Upload Appium Logs on Failure
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: ios-software_navigation_tests_appium
- path: appium.log
-
- # - name: Upload NUnit Test Results
- # uses: actions/upload-artifact@v4
- # with:
- # name: iOS-Test-Results
- # path: TestResult-iOS.xml
-
-
diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml
index 70a9a0cba..71f8463e8 100644
--- a/.github/workflows/unit_tests.yml
+++ b/.github/workflows/unit_tests.yml
@@ -11,12 +11,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
-
- - name: Set up .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '9.0.x'
-
+
- name: Install KVM and Android SDK (x86)
run: |
# Set up environment variables
@@ -36,7 +31,7 @@ jobs:
# Accept licenses and install required components
yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
# Install Android API level 35 and necessary system images
- $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-35" "system-images;android-35;google_apis;x86_64"
+ $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-36" "system-images;android-36;google_apis;x86_64"
# Export paths for future steps
echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
@@ -46,7 +41,7 @@ jobs:
- name: Install Android Build Tools
run: |
echo "Installing Android Build Tools..."
- sdkmanager "build-tools;35.0.0" # Updated to use Android 34 build tools
+ sdkmanager "build-tools;36.0.0" # Updated to use Android 34 build tools
sdkmanager --update
- name: Install MAUI workloads
@@ -54,7 +49,7 @@ jobs:
dotnet workload install maui-android
- name: Build Code
- run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json -f net9.0-android -c Release #--no-restore
+ run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json -f net10.0-android -c Release #--no-restore
- name: Run unit tests
run: dotnet test TransactionProcessor.Mobile.BusinessLogic.Tests/TransactionProcessor.Mobile.BusinessLogic.Tests.csproj --configuration Release
diff --git a/.github/workflows/windows_e2e_tests.yml b/.github/workflows/windows_e2e_tests.yml
index c8a100df1..947ebdb73 100644
--- a/.github/workflows/windows_e2e_tests.yml
+++ b/.github/workflows/windows_e2e_tests.yml
@@ -15,12 +15,7 @@ jobs:
- 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: '9.0.x'
+ vs-prerelease: true
- name: Install MAUI workloads
run: |
@@ -39,7 +34,7 @@ jobs:
run: dotnet restore TransactionProcessor.Mobile.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 TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net9.0-android -c Release --no-restore
+ run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net10.0-android -c Release --no-restore
- name: Decrypt PFX File
run: |
@@ -51,16 +46,17 @@ jobs:
- name: Publish App
run: |
- dotnet publish TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-windows10.0.19041.0 /p:AppxPackageSigningEnabled=true /p:PackageCertificateThumbprint="${{ secrets.WINDOWSSIGNINGCERTTHUMBPRINT }}"
+ dotnet publish TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net10.0-windows10.0.19041.0 /p:AppxPackageSigningEnabled=true /p:PackageCertificateThumbprint="${{ secrets.WINDOWSSIGNINGCERTTHUMBPRINT }}"
- name: Install App
shell: powershell
run: |
Import-Module Appx
- .\TransactionProcessor.Mobile/bin/Release\net9.0-windows10.0.19041.0\win10-x64\AppPackages\TransactionProcessor.Mobile_1.0.0.1_Test\Install.ps1 -Force
+ .\TransactionProcessor.Mobile/bin/Release\net10.0-windows10.0.19041.0\win-x64\AppPackages\TransactionProcessor.Mobile_1.0.0.1_Test\Install.ps1 -Force
- name: Run Windows End To End Tests
- run: dotnet test TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj --filter "(Category=PRTest)&(Category=Windows)" --no-restore
+ run: dotnet test TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj --filter "Category=PRTest&Category=Windows" --no-restore
+ #run: dotnet test TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj --list-tests -v:d
- name: Upload Logs on Failure
if: always()
diff --git a/.github/workflows/windows_navigation_tests.yml b/.github/workflows/windows_navigation_tests.yml
index e97e7336a..ec29481f8 100644
--- a/.github/workflows/windows_navigation_tests.yml
+++ b/.github/workflows/windows_navigation_tests.yml
@@ -16,11 +16,6 @@ jobs:
uses: microsoft/setup-msbuild@v1.1
with:
vs-prerelease: true
-
- - name: Set up .NET
- uses: actions/setup-dotnet@v1
- with:
- dotnet-version: '9.0.x'
- name: Install MAUI workloads
run: |
@@ -39,7 +34,7 @@ jobs:
run: dotnet restore TransactionProcessor.Mobile.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 TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net9.0-android -c Release --no-restore
+ run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net10.0-android -c Release --no-restore
- name: Decrypt PFX File
run: |
@@ -51,13 +46,13 @@ jobs:
- name: Publish App
run: |
- dotnet publish TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net9.0-windows10.0.19041.0 /p:AppxPackageSigningEnabled=true /p:PackageCertificateThumbprint="${{ secrets.WINDOWSSIGNINGCERTTHUMBPRINT }}"
+ dotnet publish TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -c Release -f net10.0-windows10.0.19041.0 /p:AppxPackageSigningEnabled=true /p:PackageCertificateThumbprint="${{ secrets.WINDOWSSIGNINGCERTTHUMBPRINT }}"
- name: Install App
shell: powershell
run: |
Import-Module Appx
- .\TransactionProcessor.Mobile/bin/Release\net9.0-windows10.0.19041.0\win10-x64\AppPackages\TransactionProcessor.Mobile_1.0.0.1_Test\Install.ps1 -Force
+ .\TransactionProcessor.Mobile/bin/Release\net10.0-windows10.0.19041.0\win-x64\AppPackages\TransactionProcessor.Mobile_1.0.0.1_Test\Install.ps1 -Force
- name: Run Windows Navigation Tests
run: dotnet test TransactionProcessor.Mobile.UiTests/TransactionProcessor.Mobile.UiTests.csproj --filter "(Category=PRNavTest)&(Category=Windows)" --no-restore
diff --git a/TestCategoryLister/TestCategoryLister.csproj b/TestCategoryLister/TestCategoryLister.csproj
index 85e2ff3cd..5b62cc77a 100644
--- a/TestCategoryLister/TestCategoryLister.csproj
+++ b/TestCategoryLister/TestCategoryLister.csproj
@@ -1,9 +1,9 @@

Exe
- net9.0
+ net10.0
-
+
\ No newline at end of file
diff --git a/TransactionProcessor.Mobile.BusinessLogic.Tests/CommonTests/ExtensionsTests.cs b/TransactionProcessor.Mobile.BusinessLogic.Tests/CommonTests/ExtensionsTests.cs
index 11fa96f48..17429eea9 100644
--- a/TransactionProcessor.Mobile.BusinessLogic.Tests/CommonTests/ExtensionsTests.cs
+++ b/TransactionProcessor.Mobile.BusinessLogic.Tests/CommonTests/ExtensionsTests.cs
@@ -316,12 +316,12 @@ public void PerformVoucherIssueRequestModel_ToSaleTransactionRequest_SaleTransac
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);
+ 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]
@@ -348,8 +348,8 @@ public void PerformMobileTopupRequestModel_ToSaleTransactionRequest_SaleTransact
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());
+ request.AdditionalRequestMetadata.ContainsKey("Amount").ShouldBeTrue();
+ request.AdditionalRequestMetadata["Amount"].ShouldBe(model.TopupAmount.ToString());
}
[Fact]
@@ -374,10 +374,10 @@ public void PerformBillPaymentGetAccountModel_ToSaleTransactionRequest_SaleTrans
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");
+ request.AdditionalRequestMetadata.ContainsKey("CustomerAccountNumber").ShouldBeTrue();
+ request.AdditionalRequestMetadata["CustomerAccountNumber"].ShouldBe(model.CustomerAccountNumber);
+ request.AdditionalRequestMetadata.ContainsKey("PataPawaPostPaidMessageType").ShouldBeTrue();
+ request.AdditionalRequestMetadata["PataPawaPostPaidMessageType"].ShouldBe("VerifyAccount");
}
[Fact]
@@ -402,10 +402,10 @@ public void PerformBillPaymentGetMeterModel_ToSaleTransactionRequest_SaleTransac
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");
+ request.AdditionalRequestMetadata.ContainsKey("MeterNumber").ShouldBeTrue();
+ request.AdditionalRequestMetadata["MeterNumber"].ShouldBe(model.MeterNumber);
+ request.AdditionalRequestMetadata.ContainsKey("PataPawaPrePayMessageType").ShouldBeTrue();
+ request.AdditionalRequestMetadata["PataPawaPrePayMessageType"].ShouldBe("meter");
}
[Fact]
@@ -434,16 +434,16 @@ public void PerformBillPaymentMakePaymentModel_PrePayment_ToSaleTransactionReque
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");
+ 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]
@@ -473,16 +473,16 @@ public void PerformBillPaymentMakePaymentModel_PostPayment_ToSaleTransactionRequ
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");
+ 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]
diff --git a/TransactionProcessor.Mobile.BusinessLogic.Tests/ServicesTests/MerchantServiceTests.cs b/TransactionProcessor.Mobile.BusinessLogic.Tests/ServicesTests/MerchantServiceTests.cs
index 31397d815..8ed82fc58 100644
--- a/TransactionProcessor.Mobile.BusinessLogic.Tests/ServicesTests/MerchantServiceTests.cs
+++ b/TransactionProcessor.Mobile.BusinessLogic.Tests/ServicesTests/MerchantServiceTests.cs
@@ -65,7 +65,7 @@ public async Task MerchantService_GetContractProducts_ContractProductsAreReturne
this.MockHttpMessageHandler.When($"http://localhost/api/merchants/contracts?application_version=1.0.0")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(contracts))); // Respond with JSON
+ .Respond("application/json", JsonConvert.SerializeObject(contracts)); // Respond with JSON
var result = await this.MerchantService.GetContractProducts(CancellationToken.None);
result.IsSuccess.ShouldBeTrue();
@@ -110,7 +110,7 @@ public async Task MerchantService_GetMerchantDetails_MerchantDetailsReturned(){
};
this.MockHttpMessageHandler.When($"http://localhost/api/merchants?application_version=1.0.0")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(merchantResponse))); // Respond with JSON
+ .Respond("application/json", JsonConvert.SerializeObject(merchantResponse)); // Respond with JSON
Result merchantDetails = await this.MerchantService.GetMerchantDetails(CancellationToken.None);
merchantDetails.IsSuccess.ShouldBeTrue();
diff --git a/TransactionProcessor.Mobile.BusinessLogic.Tests/ServicesTests/TransactionServiceTests.cs b/TransactionProcessor.Mobile.BusinessLogic.Tests/ServicesTests/TransactionServiceTests.cs
index 7574ce862..fa03be7b8 100644
--- a/TransactionProcessor.Mobile.BusinessLogic.Tests/ServicesTests/TransactionServiceTests.cs
+++ b/TransactionProcessor.Mobile.BusinessLogic.Tests/ServicesTests/TransactionServiceTests.cs
@@ -48,11 +48,11 @@ public async Task TransactionService_PerformLogon_LogonPerformed(){
MerchantId = TestData.MerchantId,
ResponseCode = TestData.ResponseCode_Success,
TransactionId = TestData.TransactionId,
- AdditionalResponseMetaData = new Dictionary()
+ AdditionalResponseMetadata = new Dictionary()
};
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(expectedResponse))); // Respond with JSON
+ this.MockHttpMessageHandler.When($"http://localhost/api/logontransactions")
+ .Respond("application/json", JsonConvert.SerializeObject(expectedResponse)); // Respond with JSON
Result performLogonResult = await this.TransactionService.PerformLogon(requestModel, CancellationToken.None);
@@ -107,11 +107,11 @@ public async Task TransactionService_PerformMobileTopup_MobileTopupPerformed(){
MerchantId = TestData.MerchantId,
ResponseCode = TestData.ResponseCode_Success,
TransactionId = TestData.TransactionId,
- AdditionalResponseMetaData = new Dictionary()
+ AdditionalResponseMetadata = new Dictionary()
};
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(expectedResponse))); // Respond with JSON
+ this.MockHttpMessageHandler.When($"http://localhost/api/saletransactions")
+ .Respond("application/json", JsonConvert.SerializeObject(expectedResponse)); // Respond with JSON
Result performMobileTopupResult = await this.TransactionService.PerformMobileTopup(requestModel, CancellationToken.None);
@@ -170,11 +170,11 @@ public async Task TransactionService_PerformVoucherIssue_VoucherIssuePerformed()
MerchantId = TestData.MerchantId,
ResponseCode = TestData.ResponseCode_Success,
TransactionId = TestData.TransactionId,
- AdditionalResponseMetaData = new Dictionary()
+ AdditionalResponseMetadata = new Dictionary()
};
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(expectedResponse))); // Respond with JSON
+ this.MockHttpMessageHandler.When($"http://localhost/api/saletransactions")
+ .Respond("application/json", JsonConvert.SerializeObject(expectedResponse)); // Respond with JSON
Result performVoucherIssueResult = await this.TransactionService.PerformVoucherIssue(requestModel, CancellationToken.None);
@@ -231,7 +231,7 @@ public async Task TransactionService_PerformBillPaymentGetAccount_GetAccountPerf
MerchantId = TestData.MerchantId,
ResponseCode = TestData.ResponseCode_Success,
TransactionId = TestData.TransactionId,
- AdditionalResponseMetaData = new Dictionary(){
+ AdditionalResponseMetadata = new Dictionary(){
{ "customerAccountName", TestData.BillDetails.AccountName },
{ "customerAccountNumber", TestData.BillDetails.AccountNumber },
{ "customerBillBalance", TestData.BillDetails.Balance },
@@ -239,8 +239,8 @@ public async Task TransactionService_PerformBillPaymentGetAccount_GetAccountPerf
}
};
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(expectedResponse))); // Respond with JSON
+ this.MockHttpMessageHandler.When($"http://localhost/api/saletransactions")
+ .Respond("application/json", JsonConvert.SerializeObject(expectedResponse)); // Respond with JSON
Result performBillPaymentGetAccountResult = await this.TransactionService.PerformBillPaymentGetAccount(requestModel, CancellationToken.None);
performBillPaymentGetAccountResult.ShouldNotBeNull();
@@ -296,13 +296,13 @@ public async Task TransactionService_PerformBillPaymentGetMeter_GetMeterPerforme
MerchantId = TestData.MerchantId,
ResponseCode = TestData.ResponseCode_Success,
TransactionId = TestData.TransactionId,
- AdditionalResponseMetaData = new Dictionary(){
+ AdditionalResponseMetadata = new Dictionary(){
{ "pataPawaPrePaidCustomerName", TestData.BillDetails.AccountName }
}
};
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(expectedResponse))); // Respond with JSON
+ this.MockHttpMessageHandler.When($"http://localhost/api/saletransactions")
+ .Respond("application/json", JsonConvert.SerializeObject(expectedResponse)); // Respond with JSON
Result performBillPaymentGetMeterResult = await this.TransactionService.PerformBillPaymentGetMeter(requestModel, CancellationToken.None);
@@ -333,11 +333,11 @@ public async Task TransactionService_PerformBillPaymentGetMeter_NoAdditionalResp
MerchantId = TestData.MerchantId,
ResponseCode = TestData.ResponseCode_Success,
TransactionId = TestData.TransactionId,
- AdditionalResponseMetaData = null
+ AdditionalResponseMetadata = null
};
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(expectedResponse))); // Respond with JSON
+ this.MockHttpMessageHandler.When($"http://localhost/api/saletransactions")
+ .Respond("application/json", JsonConvert.SerializeObject(expectedResponse)); // Respond with JSON
Result performBillPaymentGetMeterResult = await this.TransactionService.PerformBillPaymentGetMeter(requestModel, CancellationToken.None);
@@ -395,8 +395,8 @@ public async Task TransactionService_PerformBillPaymentMakePayment_MakePaymentPe
TransactionId = TestData.TransactionId
};
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(expectedResponse))); // Respond with JSON
+ this.MockHttpMessageHandler.When($"http://localhost/api/saletransactions")
+ .Respond("application/json", JsonConvert.SerializeObject(expectedResponse)); // Respond with JSON
Result performBillPaymentGetMeterResult = await this.TransactionService.PerformBillPaymentMakePayment(requestModel, CancellationToken.None);
@@ -459,11 +459,11 @@ public async Task TransactionService_PerformReconciliation_ReconciliationPerform
MerchantId = TestData.MerchantId,
ResponseCode = TestData.ResponseCode_Success,
TransactionId = TestData.TransactionId,
- AdditionalResponseMetaData = null
+ AdditionalResponseMetadata = null
};
- this.MockHttpMessageHandler.When($"http://localhost/api/transactions")
- .Respond("application/json", JsonConvert.SerializeObject(Result.Success(expectedResponse))); // Respond with JSON
+ this.MockHttpMessageHandler.When($"http://localhost/api/reconciliationtransactions")
+ .Respond("application/json", JsonConvert.SerializeObject(expectedResponse)); // Respond with JSON
Result performReconciliationResult = await this.TransactionService.PerformReconciliation(requestModel, CancellationToken.None);
diff --git a/TransactionProcessor.Mobile.BusinessLogic.Tests/TransactionProcessor.Mobile.BusinessLogic.Tests.csproj b/TransactionProcessor.Mobile.BusinessLogic.Tests/TransactionProcessor.Mobile.BusinessLogic.Tests.csproj
index 11fe4cdac..e9d5f5258 100644
--- a/TransactionProcessor.Mobile.BusinessLogic.Tests/TransactionProcessor.Mobile.BusinessLogic.Tests.csproj
+++ b/TransactionProcessor.Mobile.BusinessLogic.Tests/TransactionProcessor.Mobile.BusinessLogic.Tests.csproj
@@ -1,22 +1,22 @@

- net9.0
+ net10.0
enable
enable
false
-
-
-
+
+
+
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/TransactionProcessor.Mobile.BusinessLogic/Common/Extensions.cs b/TransactionProcessor.Mobile.BusinessLogic/Common/Extensions.cs
index 5f9ba8935..cd324e6e7 100644
--- a/TransactionProcessor.Mobile.BusinessLogic/Common/Extensions.cs
+++ b/TransactionProcessor.Mobile.BusinessLogic/Common/Extensions.cs
@@ -218,9 +218,9 @@ public static SaleTransactionRequestMessage ToSaleTransactionRequest(this Perfor
CustomerEmailAddress = model.CustomerEmailAddress,
TransactionNumber = model.TransactionNumber
};
-
+
// Add the additional request data
- saleTransactionRequest.AdditionalRequestMetaData = new Dictionary {
+ saleTransactionRequest.AdditionalRequestMetadata = new Dictionary {
{"Amount", model.VoucherAmount.ToString()},
{"RecipientEmail", model.RecipientEmailAddress},
{"RecipientMobile", model.RecipientMobileNumber}
@@ -244,7 +244,7 @@ public static SaleTransactionRequestMessage ToSaleTransactionRequest(this Perfor
};
// Add the additional request data
- saleTransactionRequest.AdditionalRequestMetaData = new Dictionary {
+ saleTransactionRequest.AdditionalRequestMetadata = new Dictionary {
{"Amount", model.TopupAmount.ToString()},
{"CustomerAccountNumber", model.CustomerAccountNumber}
};
@@ -264,7 +264,7 @@ public static SaleTransactionRequestMessage ToSaleTransactionRequest(this Perfor
TransactionNumber = model.TransactionNumber
};
// Add the additional request data
- saleTransactionRequest.AdditionalRequestMetaData = new Dictionary {
+ saleTransactionRequest.AdditionalRequestMetadata = new Dictionary {
{"CustomerAccountNumber", model.CustomerAccountNumber},
{"PataPawaPostPaidMessageType", "VerifyAccount"}
};
@@ -286,7 +286,7 @@ public static SaleTransactionRequestMessage ToSaleTransactionRequest(this Perfor
};
if (model.PostPayment){
// Add the additional request data
- saleTransactionRequest.AdditionalRequestMetaData = new Dictionary{
+ saleTransactionRequest.AdditionalRequestMetadata = new Dictionary{
{ "CustomerAccountNumber", model.CustomerAccountNumber },
{ "CustomerName", model.CustomerAccountName },
{ "MobileNumber", model.CustomerMobileNumber },
@@ -295,7 +295,7 @@ public static SaleTransactionRequestMessage ToSaleTransactionRequest(this Perfor
};
}
else{
- saleTransactionRequest.AdditionalRequestMetaData = new Dictionary{
+ saleTransactionRequest.AdditionalRequestMetadata = new Dictionary{
{ "MeterNumber", model.CustomerAccountNumber },
{ "CustomerName", model.CustomerAccountName },
{ "PataPawaPrePayMessageType", "vend" },
@@ -319,7 +319,7 @@ public static SaleTransactionRequestMessage ToSaleTransactionRequest(this Perfor
TransactionNumber = model.TransactionNumber
};
// Add the additional request data
- saleTransactionRequest.AdditionalRequestMetaData = new Dictionary {
+ saleTransactionRequest.AdditionalRequestMetadata = new Dictionary {
{"MeterNumber", model.MeterNumber.ToString()},
{"PataPawaPrePayMessageType", "meter"}
};
diff --git a/TransactionProcessor.Mobile.BusinessLogic/Services/MerchantService.cs b/TransactionProcessor.Mobile.BusinessLogic/Services/MerchantService.cs
index 1e0fd75e3..05b6bd69c 100644
--- a/TransactionProcessor.Mobile.BusinessLogic/Services/MerchantService.cs
+++ b/TransactionProcessor.Mobile.BusinessLogic/Services/MerchantService.cs
@@ -84,12 +84,12 @@ public async Task>> GetContractProducts(Cancel
Logger.LogDebug($"Transaction Response details: Status {httpResponse.StatusCode} Payload {content.Data}");
- ResponseData> responseData = this.HandleResponseContent>(content.Data);
+ List? responseData = JsonConvert.DeserializeObject>(content.Data);
- Logger.LogInformation($"{responseData.Data.Count} for merchant requested successfully");
- Logger.LogDebug($"Merchant Contract Response: [{JsonConvert.SerializeObject(responseData.Data)}]");
+ Logger.LogInformation($"{responseData.Count} for merchant requested successfully");
+ Logger.LogDebug($"Merchant Contract Response: [{JsonConvert.SerializeObject(responseData)}]");
- foreach (ContractResponse contractResponse in responseData.Data) {
+ foreach (ContractResponse contractResponse in responseData) {
foreach (ContractProduct contractResponseProduct in contractResponse.Products) {
var productType = GetProductType(contractResponse.OperatorName);
@@ -165,31 +165,31 @@ public async Task> GetMerchantDetails(CancellationT
Logger.LogDebug($"Transaction Response details: Status {httpResponse.StatusCode} Payload {content.Data}");
- ResponseData responseData = this.HandleResponseContent(content.Data);
-
+ //ResponseData responseData = this.HandleResponseContent(content.Data);
+ MerchantResponse responseData = JsonConvert.DeserializeObject(content.Data);
Logger.LogInformation("Merchant details requested successfully");
- Logger.LogDebug($"Merchant Details Response: [{JsonConvert.SerializeObject(responseData.Data)}]");
+ Logger.LogDebug($"Merchant Details Response: [{JsonConvert.SerializeObject(responseData)}]");
MerchantDetailsModel model = new MerchantDetailsModel {
- MerchantName = responseData.Data.MerchantName,
- NextStatementDate = responseData.Data.NextStatementDate,
+ MerchantName = responseData.MerchantName,
+ NextStatementDate = responseData.NextStatementDate,
LastStatementDate = new DateTime(),
- SettlementSchedule = responseData.Data.SettlementSchedule.ToString(),
+ SettlementSchedule = responseData.SettlementSchedule.ToString(),
//AvailableBalance = merchantResponse.AvailableBalance,
//Balance = merchantResponse.Balance,
Contact = new ContactModel {
- Name = responseData.Data.Contacts.First().ContactName,
- EmailAddress = responseData.Data.Contacts.First().ContactEmailAddress,
- MobileNumber = responseData.Data.Contacts.First().ContactPhoneNumber
+ Name = responseData.Contacts.First().ContactName,
+ EmailAddress = responseData.Contacts.First().ContactEmailAddress,
+ MobileNumber = responseData.Contacts.First().ContactPhoneNumber
},
Address = new AddressModel {
- AddressLine3 = responseData.Data.Addresses.First().AddressLine3,
- Town = responseData.Data.Addresses.First().Town,
- AddressLine4 = responseData.Data.Addresses.First().AddressLine4,
- PostalCode = responseData.Data.Addresses.First().PostalCode,
- Region = responseData.Data.Addresses.First().Region,
- AddressLine1 = responseData.Data.Addresses.First().AddressLine1,
- AddressLine2 = responseData.Data.Addresses.First().AddressLine2
+ AddressLine3 = responseData.Addresses.First().AddressLine3,
+ Town = responseData.Addresses.First().Town,
+ AddressLine4 = responseData.Addresses.First().AddressLine4,
+ PostalCode = responseData.Addresses.First().PostalCode,
+ Region = responseData.Addresses.First().Region,
+ AddressLine1 = responseData.Addresses.First().AddressLine1,
+ AddressLine2 = responseData.Addresses.First().AddressLine2
}
};
diff --git a/TransactionProcessor.Mobile.BusinessLogic/Services/TransactionService.cs b/TransactionProcessor.Mobile.BusinessLogic/Services/TransactionService.cs
index 9e4b468be..e6037844e 100644
--- a/TransactionProcessor.Mobile.BusinessLogic/Services/TransactionService.cs
+++ b/TransactionProcessor.Mobile.BusinessLogic/Services/TransactionService.cs
@@ -64,7 +64,7 @@ public async Task> PerformBill
CancellationToken cancellationToken) {
Logger.LogInformation("About to perform bill payment get account transaction");
- Result result = await this.SendTransactionRequest(model.ToSaleTransactionRequest(), cancellationToken);
+ Result result = await this.SendTransactionRequest(model.ToSaleTransactionRequest(), "api/saletransactions", cancellationToken);
if (result.IsSuccess == false)
{
@@ -74,7 +74,7 @@ public async Task> PerformBill
PerformBillPaymentGetAccountResponseModel responseModel = new()
{
- BillDetails = result.Data.AdditionalResponseMetaData.ToBillDetails()
+ BillDetails = result.Data.AdditionalResponseMetadata.ToBillDetails()
};
Logger.LogInformation("Bill payment - get account transaction performed successfully");
@@ -86,7 +86,7 @@ public async Task> PerformBil
CancellationToken cancellationToken) {
Logger.LogInformation("About to perform bill payment make payment transaction");
- Result result = await this.SendTransactionRequest(model.ToSaleTransactionRequest(), cancellationToken);
+ Result result = await this.SendTransactionRequest(model.ToSaleTransactionRequest(),"api/saletransactions", cancellationToken);
if (result.IsSuccess == false)
{
@@ -112,7 +112,7 @@ public async Task> PerformBil
public async Task> PerformBillPaymentGetMeter(PerformBillPaymentGetMeterModel model, CancellationToken cancellationToken){
Logger.LogInformation("About to perform bill payment get meter transaction");
- Result result = await this.SendTransactionRequest(model.ToSaleTransactionRequest(), cancellationToken);
+ Result result = await this.SendTransactionRequest(model.ToSaleTransactionRequest(), "api/saletransactions", cancellationToken);
if (result.IsSuccess == false)
{
@@ -121,9 +121,9 @@ public async Task> PerformBillPa
}
- MeterDetails meterDetails = result.Data.AdditionalResponseMetaData switch{
+ MeterDetails meterDetails = result.Data.AdditionalResponseMetadata switch{
null => null,
- _ => result.Data.AdditionalResponseMetaData.ToMeterDetails(model.MeterNumber)
+ _ => result.Data.AdditionalResponseMetadata.ToMeterDetails(model.MeterNumber)
};
PerformBillPaymentGetMeterResponseModel responseModel = new()
@@ -140,7 +140,7 @@ public async Task> PerformLogon(PerformLogonRe
CancellationToken cancellationToken) {
Logger.LogInformation("About to perform logon transaction");
- Result result = await this.SendTransactionRequest(model.ToLogonTransactionRequest(), cancellationToken);
+ Result result = await this.SendTransactionRequest(model.ToLogonTransactionRequest(), "api/logontransactions", cancellationToken);
if (result.IsSuccess == false)
{
@@ -167,7 +167,7 @@ public async Task> PerformMobileTopup(Pe
Logger.LogInformation("About to perform mobile top-up transaction");
Result result =
- await this.SendTransactionRequest(model.ToSaleTransactionRequest(), cancellationToken);
+ await this.SendTransactionRequest(model.ToSaleTransactionRequest(), "api/saletransactions", cancellationToken);
if (result.IsSuccess == false) {
Logger.LogWarning("Error performing Mobile top-up transaction");
@@ -192,7 +192,7 @@ public async Task> PerformReconciliat
CancellationToken cancellationToken) {
Logger.LogInformation("About to perform reconciliation transaction");
- Result result = await this.SendTransactionRequest(model.ToReconciliationRequest(), cancellationToken);
+ Result result = await this.SendTransactionRequest(model.ToReconciliationRequest(), "api/reconciliationtransactions", cancellationToken);
if (result.IsSuccess == false)
{
@@ -220,7 +220,7 @@ public async Task> PerformVoucherIssue(
CancellationToken cancellationToken) {
Logger.LogInformation("About to perform voucher transaction");
- Result result = await this.SendTransactionRequest(model.ToSaleTransactionRequest(), cancellationToken);
+ Result result = await this.SendTransactionRequest(model.ToSaleTransactionRequest(), "api/saletransactions", cancellationToken);
if (result.IsSuccess == false)
{
@@ -253,14 +253,15 @@ protected override async Task> HandleResponseX(HttpResponseMessag
private String BuildRequestUrl(String route) {
String baseAddress = this.BaseAddressResolver("TransactionProcessorACL");
- String requestUri = $"{baseAddress}{route}";
+ String requestUri = $"{baseAddress}/{route}";
return requestUri;
}
private async Task> SendTransactionRequest(TRequest request,
+ String route,
CancellationToken cancellationToken) {
- String requestUri = this.BuildRequestUrl("/api/transactions");
+ String requestUri = this.BuildRequestUrl(route);
try {
String requestSerialised = JsonConvert.SerializeObject(request, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All });
@@ -286,9 +287,9 @@ private async Task> SendTransactionRequest responseData = this.HandleResponseContent(result.Data);
+ var responseData = JsonConvert.DeserializeObject(result.Data);
- return Result.Success(responseData.Data);
+ return Result.Success(responseData);
}
catch (Exception ex) {
// An exception has occurred, add some additional information to the message
diff --git a/TransactionProcessor.Mobile.BusinessLogic/TransactionProcessor.Mobile.BusinessLogic.csproj b/TransactionProcessor.Mobile.BusinessLogic/TransactionProcessor.Mobile.BusinessLogic.csproj
index 694fc5110..7d324aaa4 100644
--- a/TransactionProcessor.Mobile.BusinessLogic/TransactionProcessor.Mobile.BusinessLogic.csproj
+++ b/TransactionProcessor.Mobile.BusinessLogic/TransactionProcessor.Mobile.BusinessLogic.csproj
@@ -1,22 +1,22 @@

- net9.0
+ net10.0
enable
enable
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
diff --git a/TransactionProcessor.Mobile.BusinessLogic/UIServices/IDeviceService.cs b/TransactionProcessor.Mobile.BusinessLogic/UIServices/IDeviceService.cs
index 8d95081a7..1b9d2412e 100644
--- a/TransactionProcessor.Mobile.BusinessLogic/UIServices/IDeviceService.cs
+++ b/TransactionProcessor.Mobile.BusinessLogic/UIServices/IDeviceService.cs
@@ -7,9 +7,7 @@ public interface IDeviceService
String GetModel();
String GetPlatform();
-
- Boolean IsIOS();
-
+
String GetManufacturer();
void SetOrientation(Orientation displayOrientation);
diff --git a/TransactionProcessor.Mobile.UITests/Common/DockerHelper.cs b/TransactionProcessor.Mobile.UITests/Common/DockerHelper.cs
index c8f6c0dd4..bff23fd3e 100644
--- a/TransactionProcessor.Mobile.UITests/Common/DockerHelper.cs
+++ b/TransactionProcessor.Mobile.UITests/Common/DockerHelper.cs
@@ -1,13 +1,14 @@
using System.Net;
using System.Net.Sockets;
-using Ductus.FluentDocker.Builders;
-using Ductus.FluentDocker.Common;
-using Ductus.FluentDocker.Services;
-using Ductus.FluentDocker.Services.Extensions;
+using System.Runtime.InteropServices;
+using DotNet.Testcontainers.Builders;
+using DotNet.Testcontainers.Containers;
+using DotNet.Testcontainers.Networks;
using EventStore.Client;
using Reqnroll;
using SecurityService.Client;
using Shared.IntegrationTesting;
+using Shared.IntegrationTesting.TestContainers;
using Shared.Logger;
using Shouldly;
using TransactionProcessor.Client;
@@ -17,7 +18,7 @@
namespace TransactionProcessor.Mobile.UITests.Common
{
- public class DockerHelper : global::Shared.IntegrationTesting.DockerHelper
+ public class DockerHelper : global::Shared.IntegrationTesting.TestContainers.DockerHelper
{
#region Fields
@@ -86,11 +87,10 @@ public string GetLocalIPAddress()
public String LocalIPAddress { get; private set; }
public override ContainerBuilder SetupTransactionProcessorAclContainer(){
- this.AdditionalVariables.Add(ContainerType.TransactionProcessorAcl, new List());
- this.SetAdditionalVariables(ContainerType.TransactionProcessorAcl,
- new List{
- "AppSettings:SkipVersionCheck=true"
- });
+ this.AdditionalVariables.Add(ContainerType.TransactionProcessorAcl, new Dictionary {
+ {"AppSettings:SkipVersionCheck", "true"}
+ });
+
return base.SetupTransactionProcessorAclContainer();
}
@@ -113,19 +113,19 @@ public override async Task CreateSubscriptions()
/// Name of the scenario.
public override async Task StartContainersForScenarioRun(String scenarioName, DockerServices dockerServices)
{
- DockerEnginePlatform engineType = BaseDockerHelper.GetDockerEnginePlatform();
- if (engineType == DockerEnginePlatform.Windows){
+ var engineType = await BaseDockerHelper.GetDockerEnginePlatform();
+
+ if (engineType.Data == DockerEnginePlatform.Windows){
this.SetImageDetails(ContainerType.EventStore, ("stuartferguson/eventstore_windows", true));
}
-
- //this.SetImageDetails(ContainerType.TransactionProcessorAcl, ("transactionprocessoracl", false));
-
+
// Get the address of the host
this.LocalIPAddress = this.GetLocalIPAddress();
this.Trace(this.LocalIPAddress);
await base.StartContainersForScenarioRun(scenarioName, dockerServices);
- await this.SetupConfigHostContainer(this.TestNetworks);
+ var c = await this.StartContainer2(this.SetupConfigHostContainer,this.TestNetworks, (DockerServices)512);
+ this.ConfigHostPort = c.GetMappedPublicPort(ConfigHostDockerPort);
// Setup the base address resolvers
@@ -159,33 +159,6 @@ public override async Task StartContainersForScenarioRun(String scenarioName, Do
public String SecurityServiceBaseAddressResolver(String api) => $"https://127.0.0.1:{this.SecurityServicePort}";
- private async Task RemoveEstateReadModel()
- {
- List estateIdList = this.TestingContext.GetAllEstateIds();
-
- foreach (Guid estateId in estateIdList)
- {
- String databaseName = $"EstateReportingReadModel{estateId}";
-
- // Build the connection string (to master)
- String connectionString = Setup.GetLocalConnectionString(databaseName);
- await Retry.For(async () =>
- {
- //EstateReportingSqlServerContext context = new EstateReportingSqlServerContext(connectionString);
- //await context.Database.EnsureDeletedAsync(CancellationToken.None);
- }, retryFor: TimeSpan.FromMinutes(2), retryInterval: TimeSpan.FromSeconds(30));
- }
- }
-
- ///
- /// Stops the containers for scenario run.
- ///
- public override async Task StopContainersForScenarioRun(DockerServices sharedDockerServices) {
- await this.RemoveEstateReadModel().ConfigureAwait(false);
-
- await base.StopContainersForScenarioRun(sharedDockerServices);
- }
-
public const int ConfigHostDockerPort = 9200;
public String ConfigHostContainerName;
@@ -193,55 +166,41 @@ public override async Task StopContainersForScenarioRun(DockerServices sharedDoc
public HttpClient TestHostHttpClient;
- public async Task SetupConfigHostContainer(List networkServices)
+ public ContainerBuilder SetupConfigHostContainer()
{
this.Trace("About to Start Config Host Container");
- List environmentVariables = new List();
- environmentVariables.Add("AppSettings:InMemoryDatabase=true");
+ Dictionary environmentVariables = new();
+ environmentVariables.Add("AppSettings:InMemoryDatabase","true");
+
this.ConfigHostContainerName = $"mobileconfighost{this.TestId:N}";
String imageName = "stuartferguson/mobileconfiguration:master";
-
- if (FdOs.IsWindows() && Shared.IntegrationTesting.DockerHelper.GetDockerEnginePlatform() == DockerEnginePlatform.Windows){
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && this.DockerPlatform == DockerEnginePlatform.Windows){
imageName = "stuartferguson/mobileconfigurationwindows:master";
}
- ContainerBuilder configHostContainer = new Builder().UseContainer().WithName(this.ConfigHostContainerName)
- .WithEnvironment(environmentVariables.ToArray())
- .UseImageDetails((imageName, true))
- .ExposePort(ConfigHostDockerPort)
- .MountHostFolder(this.DockerPlatform, this.HostTraceFolder)
- .SetDockerCredentials(this.DockerCredentials);
-
- // Now build and return the container
- IContainerService builtContainer = configHostContainer.Build().Start().WaitForPort($"{ConfigHostDockerPort}/tcp", 30000);
+ ContainerBuilder configHostContainer = new ContainerBuilder().WithName(this.ConfigHostContainerName)
+ .WithImage(imageName)
+ .WithEnvironment(environmentVariables)
+ .MountHostFolder(this.DockerPlatform, this.HostTraceFolder)
+ .WithPortBinding(ConfigHostDockerPort, true);
- foreach (INetworkService networkService in networkServices)
- {
- networkService.Attach(builtContainer, false);
- }
-
- this.Trace("Config Host Container Started");
- this.Containers.Add((DockerServices.TestHost, builtContainer));
-
- // Do a health check here
- this.ConfigHostPort = builtContainer.ToHostExposedEndpoint($"{ConfigHostDockerPort}/tcp").Port;
-
- //await this.DoHealthCheck(ContainerType.CallbackHandler);
- return builtContainer;
+ return configHostContainer;
}
- public override ContainerBuilder SetupTransactionProcessorContainer()
- {
- List variables = new List();
- variables.Add($"OperatorConfiguration:PataPawaPrePay:Url=http://{this.TestHostContainerName}:{DockerPorts.TestHostPort}/api/patapawaprepay");
+ //public override ContainerBuilder SetupTransactionProcessorContainer()
+ //{
+ // //List variables = new List();
+ // //variables.Add($"OperatorConfiguration:PataPawaPrePay:Url=http://{this.TestHostContainerName}:{DockerPorts.TestHostPort}/api/patapawaprepay");
- this.AdditionalVariables.Add(ContainerType.FileProcessor, variables);
- //this.SetAdditionalVariables(ContainerType.FileProcessor, variables);
-
- return base.SetupTransactionProcessorContainer();
- }
+ // //this.AdditionalVariables.Add(ContainerType.FileProcessor, variables);
+ // this.AdditionalVariables.Add(ContainerType.TransactionProcessor, new Dictionary {
+ // {"OperatorConfiguration:PataPawaPrePay:Url", $"http://{this.TestHostContainerName}:{DockerPorts.TestHostPort}/api/patapawaprepay"}
+ // });
+
+ // return base.SetupTransactionProcessorContainer();
+ //}
#endregion
}
diff --git a/TransactionProcessor.Mobile.UITests/Common/GenericSteps.cs b/TransactionProcessor.Mobile.UITests/Common/GenericSteps.cs
index 63fe40941..bce0dce10 100644
--- a/TransactionProcessor.Mobile.UITests/Common/GenericSteps.cs
+++ b/TransactionProcessor.Mobile.UITests/Common/GenericSteps.cs
@@ -23,8 +23,7 @@ public GenericSteps(ScenarioContext scenarioContext,
[BeforeScenario(Order = 0)]
public async Task StartSystem(){
if (this.ScenarioContext.ScenarioInfo.Tags.Contains("PRNavTest") ||
- this.ScenarioContext.ScenarioInfo.Tags.Contains("PRHWNavTest") ||
- this.ScenarioContext.ScenarioInfo.Tags.Contains("iOSPRTest"))
+ this.ScenarioContext.ScenarioInfo.Tags.Contains("PRHWNavTest"))
{
// Initialise a logger
String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", "");
@@ -37,7 +36,9 @@ public async Task StartSystem(){
DockerServices dockerServices = DockerServices.EventStore |
DockerServices.MessagingService | DockerServices.SecurityService |
DockerServices.TestHost | DockerServices.SqlServer | DockerServices.TransactionProcessor |
- DockerServices.TransactionProcessorAcl;
+ DockerServices.TransactionProcessorAcl | (DockerServices)512;
+
+ //dockerServices = DockerServices.EventStore | DockerServices.SqlServer | (DockerServices)512;
// Initialise a logger
String scenarioName = this.ScenarioContext.ScenarioInfo.Title.Replace(" ", "");
@@ -62,8 +63,6 @@ public async Task StartSystem(){
await Setup.GlobalSetup(this.TestingContext.DockerHelper);
- this.TestingContext.DockerHelper.SqlServerContainer = Setup.DatabaseServerContainer;
- this.TestingContext.DockerHelper.SqlServerNetwork = Setup.DatabaseServerNetwork;
this.TestingContext.DockerHelper.DockerCredentials = Setup.DockerCredentials;
this.TestingContext.DockerHelper.SqlCredentials = Setup.SqlCredentials;
this.TestingContext.DockerHelper.SqlServerContainerName = "sharedsqlserver";
@@ -80,11 +79,10 @@ public async Task StartSystem(){
[AfterScenario(Order = 0)]
public async Task StopSystem()
{
- if (this.ScenarioContext.ScenarioInfo.Tags.Contains("PRNavTest") == false && this.ScenarioContext.ScenarioInfo.Tags.Contains("PRHWNavTest") == false
- && this.ScenarioContext.ScenarioInfo.Tags.Contains("iOSPRTest") == false)
+ if (this.ScenarioContext.ScenarioInfo.Tags.Contains("PRNavTest") == false && this.ScenarioContext.ScenarioInfo.Tags.Contains("PRHWNavTest") == false)
{
this.TestingContext.Logger.LogInformation("About to Stop Containers for Scenario Run");
- await this.TestingContext.DockerHelper.StopContainersForScenarioRun(DockerServices.SqlServer).ConfigureAwait(false);
+ await this.TestingContext.DockerHelper.StopContainersForScenarioRun(DockerServices.None).ConfigureAwait(false);
this.TestingContext.Logger.LogInformation("Containers for Scenario Run Stopped");
}
}
diff --git a/TransactionProcessor.Mobile.UITests/Common/Setup.cs b/TransactionProcessor.Mobile.UITests/Common/Setup.cs
index e62f3ee0c..c31d00a7a 100644
--- a/TransactionProcessor.Mobile.UITests/Common/Setup.cs
+++ b/TransactionProcessor.Mobile.UITests/Common/Setup.cs
@@ -8,33 +8,12 @@ namespace TransactionProcessor.Mobile.UITests.Common
[Binding]
[Scope(Tag = "base")]
public class Setup{
- public static IContainerService DatabaseServerContainer;
- public static INetworkService DatabaseServerNetwork;
public static (String usename, String password) SqlCredentials = ("sa", "thisisalongpassword123!");
public static (String url, String username, String password) DockerCredentials = ("https://www.docker.com", "stuartferguson", "Sc0tland");
//[BeforeTestRun]
public static async Task GlobalSetup(DockerHelper dockerHelper)
{
ShouldlyConfiguration.DefaultTaskTimeout = TimeSpan.FromMinutes(1);
- dockerHelper.SqlCredentials = Setup.SqlCredentials;
- dockerHelper.DockerCredentials = Setup.DockerCredentials;
- dockerHelper.SqlServerContainerName = "sharedsqlserver";
-
- Setup.DatabaseServerNetwork = dockerHelper.SetupTestNetwork("sharednetwork", true);
- Setup.DatabaseServerContainer = await dockerHelper.SetupSqlServerContainer(Setup.DatabaseServerNetwork);
}
-
- public static String GetConnectionString(String databaseName)
- {
- return $"server={Setup.DatabaseServerContainer.Name};database={databaseName};user id={Setup.SqlCredentials.usename};password={Setup.SqlCredentials.password}";
- }
-
- public static String GetLocalConnectionString(String databaseName)
- {
- Int32 databaseHostPort = Setup.DatabaseServerContainer.ToHostExposedEndpoint("1433/tcp").Port;
-
- return $"server=localhost,{databaseHostPort};database={databaseName};user id={Setup.SqlCredentials.usename};password={Setup.SqlCredentials.password}";
- }
-
}
}
diff --git a/TransactionProcessor.Mobile.UITests/Drivers/AppiumDriver.cs b/TransactionProcessor.Mobile.UITests/Drivers/AppiumDriver.cs
index eb139e65f..51ade1ef8 100644
--- a/TransactionProcessor.Mobile.UITests/Drivers/AppiumDriver.cs
+++ b/TransactionProcessor.Mobile.UITests/Drivers/AppiumDriver.cs
@@ -11,10 +11,8 @@ namespace TransactionProcessor.Mobile.UITests.Drivers
{
public enum MobileTestPlatform
{
- iOS,
Android,
Windows,
- MacCatalyst
}
public class AppiumDriverWrapper
@@ -40,10 +38,6 @@ public void StartApp()
{
AppiumDriverWrapper.SetupAndroidDriver(appiumService);
}
- else if (AppiumDriverWrapper.MobileTestPlatform == MobileTestPlatform.iOS)
- {
- AppiumDriverWrapper.SetupiOSDriverNew(appiumService);
- }
else if (AppiumDriverWrapper.MobileTestPlatform == MobileTestPlatform.Windows)
{
AppiumDriverWrapper.SetupWindowsDriver(appiumService);
@@ -64,90 +58,14 @@ private static void SetupWindowsDriver(AppiumLocalService appiumService)
driverOptions.App = "TransactionMobile_zct748q4xfh0m!App";
AppiumDriverWrapper.Driver = new WindowsDriver(appiumService, driverOptions, TimeSpan.FromMinutes(10));
}
-
- //public static void SetupiOSDriverX()
- //{
- // //String assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
- // //String binariesFolder = Path.Combine(assemblyFolder, "..", "..", "..", "..", @"TransactionProcessor.Mobile/bin/Release/net9.0-ios/iossimulator-arm64/");
- // //var appPath = Path.Combine(binariesFolder, "TransactionProcessor.Mobile.app");
- // var appPath = "/Users/user272907/Documents/Projects/TransactionMobile/TransactionProcessor.Mobile/bin/Release/net9.0-ios/iossimulator-arm64/TransactionProcessor.Mobile.app";
- // var exists = Directory.Exists(appPath);
- // var options = new AppiumOptions();
- // options.PlatformName = "iOS";
- // options.PlatformVersion = "18.3";
- // options.AutomationName = "XCUITest";
- // options.DeviceName = "iPhone 16";
- // options.App = appPath; // Only if you want Appium to install the app
-
- // //var simulatorId = Environment.GetEnvironmentVariable("SIMULATOR_ID")?.Trim();
- // //if (string.IsNullOrWhiteSpace(simulatorId))
- // // throw new InvalidOperationException("SIMULATOR_ID environment variable is not set.");
- // //options.AddAdditionalAppiumOption("udid", simulatorId);
-
- // //options.AddAdditionalAppiumOption("usePrebuiltWDA", true);
- // //options.AddAdditionalAppiumOption("noReset", true);
- // //options.AddAdditionalAppiumOption("fullReset", false);
- // options.AddAdditionalAppiumOption("usePrebuiltWDA", true);
- // options.AddAdditionalAppiumOption("derivedDataPath", "~/Library/Developer/Xcode/DerivedData/WebDriverAgent-hjlcwhatzxfnnggzdecgbewgjzil");
- // options.AddAdditionalAppiumOption("wdaStartupRetries", 2);
- // options.AddAdditionalAppiumOption("wdaStartupRetryInterval", 10000);
- // options.AddAdditionalAppiumOption("showXcodeLog", true);
- // AppiumDriverWrapper.Driver = new OpenQA.Selenium.Appium.iOS.IOSDriver(
- // new Uri("http://127.0.0.1:4723"), options, TimeSpan.FromMinutes(2));
- //}
-
- private static void SetupiOSDriverNew(AppiumLocalService appiumService)
- {
- String assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
- String binariesFolder = Path.Combine(assemblyFolder, "..", "..", "..", "..", @"TransactionProcessor.Mobile/bin/Release/net9.0-ios/iossimulator-arm64/");
- var appPath = Path.Combine(binariesFolder, "TransactionProcessor.Mobile.app");
-
- var options = new AppiumOptions();
- options.PlatformName = "iOS";
- options.DeviceName = "";
- //options.AddAdditionalAppiumOption("udid", "0A7AD110-C0C0-45BC-BCBC-8091AC55FF18");
- var simulatorId = Environment.GetEnvironmentVariable("SIMULATOR_ID")?.Trim();
- options.AddAdditionalAppiumOption("udid", simulatorId);
- options.App = appPath;
- //options.AddAdditionalAppiumOption("bundleId", "com.apple.Preferences");
- options.AutomationName = "XCUITest";
- options.AddAdditionalAppiumOption("useNewWDA", true);
- options.AddAdditionalAppiumOption("autoAcceptAlerts", true);
- options.AddAdditionalAppiumOption("wdaStartupRetries", 3);
- options.AddAdditionalAppiumOption("wdaStartupRetryInterval", 5000);
- options.AddAdditionalAppiumOption("showXcodeLog", true);
- options.AddAdditionalAppiumOption("waitForIdleTimeout", 100);
- AppiumDriverWrapper.Driver = new OpenQA.Selenium.Appium.iOS.IOSDriver(appiumService, options);
- }
-
- //private static void SetupiOSDriver(AppiumLocalService appiumService)
- //{
- // String assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
- // String binariesFolder = Path.Combine(assemblyFolder, "..", "..", "..", "..", @"TransactionProcessor.Mobile/bin/Release/net9.0-ios/iossimulator-arm64/");
- // var appPath = Path.Combine(binariesFolder, "TransactionProcessor.Mobile.app");
-
- // var options = new AppiumOptions();
- // options.PlatformName = "iOS";
- // options.PlatformVersion = "18.3";
- // options.AutomationName = "XCUITest";
- // options.DeviceName = "iPhone 16";
- // options.App = appPath; // Only if you want Appium to install the app
- // //options.AddAdditionalAppiumOption("useNewWDA", true); // Rebuild WDA
- // options.AddAdditionalAppiumOption("usePrebuiltWDA", true);
- // options.AddAdditionalAppiumOption("derivedDataPath", "~/Library/Developer/Xcode/DerivedData/WebDriverAgent-hjlcwhatzxfnnggzdecgbewgjziloption");
- // options.AddAdditionalAppiumOption("wdaStartupRetries", 2);
- // options.AddAdditionalAppiumOption("wdaStartupRetryInterval", 10000);
-
- // AppiumDriverWrapper.Driver = new OpenQA.Selenium.Appium.iOS.IOSDriver(appiumService, options, TimeSpan.FromMinutes(2));
- //}
-
+
private static void SetupAndroidDriver(AppiumLocalService appiumService)
{
var driverOptions = new AppiumOptions();
driverOptions.AddAdditionalAppiumOption("adbExecTimeout", TimeSpan.FromMinutes(5).TotalMilliseconds);
driverOptions.AutomationName = "UIAutomator2";
driverOptions.PlatformName = "Android";
- driverOptions.PlatformVersion = "15.0";
+ driverOptions.PlatformVersion = "16.0";
driverOptions.DeviceName = "emulator-5554";
driverOptions.AddAdditionalAppiumOption(MobileCapabilityType.FullReset, true);
@@ -157,7 +75,7 @@ private static void SetupAndroidDriver(AppiumLocalService appiumService)
driverOptions.AddAdditionalAppiumOption(MobileCapabilityType.NewCommandTimeout, 6000);
String assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
- String binariesFolder = Path.Combine(assemblyFolder, "..", "..", "..", "..", @"TransactionProcessor.Mobile/bin/Release/net9.0-android/");
+ String binariesFolder = Path.Combine(assemblyFolder, "..", "..", "..", "..", @"TransactionProcessor.Mobile/bin/Release/net10.0-android/");
var apkPath = Path.Combine(binariesFolder, "com.transactionprocessor.mobile-Signed.apk");
var fileinfo = new FileInfo(apkPath);
diff --git a/TransactionProcessor.Mobile.UITests/Features/EndToEndTests.feature b/TransactionProcessor.Mobile.UITests/Features/EndToEndTests.feature
index 6e43abdfe..2924feab9 100644
--- a/TransactionProcessor.Mobile.UITests/Features/EndToEndTests.feature
+++ b/TransactionProcessor.Mobile.UITests/Features/EndToEndTests.feature
@@ -111,8 +111,6 @@ Background:
| Reference | Amount | DateTime | MerchantName | EstateName |
| Deposit1 | 100.00 | Today | Test Merchant 1 | Test Estate 1 |
- #Given I have created a config for my application
-
Given I have created a config for my device
@PRTest
diff --git a/TransactionProcessor.Mobile.UITests/Features/EndToEndTests.feature.cs b/TransactionProcessor.Mobile.UITests/Features/EndToEndTests.feature.cs
index 08fecec13..5f7d2e2ad 100644
--- a/TransactionProcessor.Mobile.UITests/Features/EndToEndTests.feature.cs
+++ b/TransactionProcessor.Mobile.UITests/Features/EndToEndTests.feature.cs
@@ -1,8 +1,8 @@
// ------------------------------------------------------------------------------
//
-// This code was generated by Reqnroll (https://www.reqnroll.net/).
-// Reqnroll Version:2.0.0.0
-// Reqnroll Generator Version:2.0.0.0
+// This code was generated by Reqnroll (https://reqnroll.net/).
+// Reqnroll Version:3.0.0.0
+// Reqnroll Generator Version:3.0.0.0
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -15,19 +15,19 @@ namespace TransactionProcessor.Mobile.UITests.Features
{
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "2.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "3.0.0.0")]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [NUnit.Framework.TestFixtureAttribute()]
- [NUnit.Framework.DescriptionAttribute("EndToEndTests")]
- [NUnit.Framework.FixtureLifeCycleAttribute(NUnit.Framework.LifeCycle.InstancePerTestCase)]
- [NUnit.Framework.CategoryAttribute("background")]
- [NUnit.Framework.CategoryAttribute("login")]
- [NUnit.Framework.CategoryAttribute("toolbar")]
- [NUnit.Framework.CategoryAttribute("profile")]
- [NUnit.Framework.CategoryAttribute("base")]
- [NUnit.Framework.CategoryAttribute("sharedapp")]
- [NUnit.Framework.CategoryAttribute("shared")]
- [NUnit.Framework.CategoryAttribute("transactions")]
+ [global::NUnit.Framework.TestFixtureAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("EndToEndTests")]
+ [global::NUnit.Framework.FixtureLifeCycleAttribute(global::NUnit.Framework.LifeCycle.InstancePerTestCase)]
+ [global::NUnit.Framework.CategoryAttribute("background")]
+ [global::NUnit.Framework.CategoryAttribute("login")]
+ [global::NUnit.Framework.CategoryAttribute("toolbar")]
+ [global::NUnit.Framework.CategoryAttribute("profile")]
+ [global::NUnit.Framework.CategoryAttribute("base")]
+ [global::NUnit.Framework.CategoryAttribute("sharedapp")]
+ [global::NUnit.Framework.CategoryAttribute("shared")]
+ [global::NUnit.Framework.CategoryAttribute("transactions")]
public partial class EndToEndTestsFeature
{
@@ -43,22 +43,23 @@ public partial class EndToEndTestsFeature
"shared",
"transactions"};
- private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new global::System.Globalization.CultureInfo("en-US"), "Features", "EndToEndTests", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags);
+ private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new global::System.Globalization.CultureInfo("en-US"), "Features", "EndToEndTests", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags, InitializeCucumberMessages());
#line 1 "EndToEndTests.feature"
#line hidden
- [NUnit.Framework.OneTimeSetUpAttribute()]
+ [global::NUnit.Framework.OneTimeSetUpAttribute()]
public static async global::System.Threading.Tasks.Task FeatureSetupAsync()
{
}
- [NUnit.Framework.OneTimeTearDownAttribute()]
+ [global::NUnit.Framework.OneTimeTearDownAttribute()]
public static async global::System.Threading.Tasks.Task FeatureTearDownAsync()
{
+ await global::Reqnroll.TestRunnerManager.ReleaseFeatureAsync(featureInfo);
}
- [NUnit.Framework.SetUpAttribute()]
+ [global::NUnit.Framework.SetUpAttribute()]
public async global::System.Threading.Tasks.Task TestInitializeAsync()
{
testRunner = global::Reqnroll.TestRunnerManager.GetTestRunnerForAssembly(featureHint: featureInfo);
@@ -84,7 +85,7 @@ public partial class EndToEndTestsFeature
}
}
- [NUnit.Framework.TearDownAttribute()]
+ [global::NUnit.Framework.TearDownAttribute()]
public async global::System.Threading.Tasks.Task TestTearDownAsync()
{
if ((testRunner == null))
@@ -102,10 +103,10 @@ public partial class EndToEndTestsFeature
}
}
- public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
+ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo, global::Reqnroll.RuleInfo ruleInfo)
{
- testRunner.OnScenarioInitialize(scenarioInfo);
- testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(NUnit.Framework.TestContext.CurrentContext);
+ testRunner.OnScenarioInitialize(scenarioInfo, ruleInfo);
+ testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(global::NUnit.Framework.TestContext.CurrentContext);
}
public async global::System.Threading.Tasks.Task ScenarioStartAsync()
@@ -519,26 +520,34 @@ await testRunner.GivenAsync("I have a token to access the estate management and
#line 110
await testRunner.GivenAsync("I make the following manual merchant deposits", ((string)(null)), table20, "Given ");
#line hidden
-#line 116
+#line 114
await testRunner.GivenAsync("I have created a config for my device", ((string)(null)), ((global::Reqnroll.Table)(null)), "Given ");
#line hidden
}
- [NUnit.Framework.TestAttribute()]
- [NUnit.Framework.DescriptionAttribute("EndToEnd")]
- [NUnit.Framework.CategoryAttribute("PRTest")]
+ private static global::Reqnroll.Formatters.RuntimeSupport.FeatureLevelCucumberMessages InitializeCucumberMessages()
+ {
+ return new global::Reqnroll.Formatters.RuntimeSupport.FeatureLevelCucumberMessages("Features/EndToEndTests.feature.ndjson", 3);
+ }
+
+ [global::NUnit.Framework.TestAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("EndToEnd")]
+ [global::NUnit.Framework.CategoryAttribute("PRTest")]
public async global::System.Threading.Tasks.Task EndToEnd()
{
string[] tagsOfScenario = new string[] {
"PRTest"};
global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary();
- global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("EndToEnd", null, tagsOfScenario, argumentsOfScenario, featureTags);
-#line 119
-this.ScenarioInitialize(scenarioInfo);
+ string pickleIndex = "0";
+ global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("EndToEnd", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex);
+ string[] tagsOfRule = ((string[])(null));
+ global::Reqnroll.RuleInfo ruleInfo = null;
+#line 117
+this.ScenarioInitialize(scenarioInfo, ruleInfo);
#line hidden
if ((global::Reqnroll.TagHelper.ContainsIgnoreTag(scenarioInfo.CombinedTags) || global::Reqnroll.TagHelper.ContainsIgnoreTag(featureTags)))
{
- testRunner.SkipScenario();
+ await testRunner.SkipScenarioAsync();
}
else
{
@@ -546,34 +555,34 @@ await testRunner.GivenAsync("I have a token to access the estate management and
#line 4
await this.FeatureBackgroundAsync();
#line hidden
-#line 120
+#line 118
await testRunner.GivenAsync("I am on the Login Screen", ((string)(null)), ((global::Reqnroll.Table)(null)), "Given ");
#line hidden
-#line 121
+#line 119
await testRunner.AndAsync("my device is registered", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 122
+#line 120
await testRunner.WhenAsync("I enter \'user1\' as the Email Address", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 123
+#line 121
await testRunner.AndAsync("I enter \'123456\' as the Password", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 124
+#line 122
await testRunner.AndAsync("I tap on Login", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 125
+#line 123
await testRunner.ThenAsync("the Merchant Home Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 126
+#line 124
await testRunner.WhenAsync("I tap on Profile", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 127
+#line 125
await testRunner.ThenAsync("the My Profile Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 128
+#line 126
await testRunner.WhenAsync("I tap on the Addresses button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 129
+#line 127
await testRunner.ThenAsync("the Address List Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
global::Reqnroll.Table table21 = new global::Reqnroll.Table(new string[] {
@@ -582,19 +591,19 @@ await testRunner.GivenAsync("I have a token to access the estate management and
table21.AddRow(new string[] {
"test address line 1",
"TestTown"});
-#line 130
+#line 128
await testRunner.AndAsync("the Primary Address is displayed", ((string)(null)), table21, "And ");
#line hidden
-#line 133
+#line 131
await testRunner.WhenAsync("I click on the back button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 134
+#line 132
await testRunner.ThenAsync("the My Profile Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 135
+#line 133
await testRunner.WhenAsync("I tap on the Account Info button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 136
+#line 134
await testRunner.ThenAsync("the Account Info Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
global::Reqnroll.Table table22 = new global::Reqnroll.Table(new string[] {
@@ -605,121 +614,121 @@ await testRunner.GivenAsync("I have a token to access the estate management and
"Test Merchant 1",
"0",
"0"});
-#line 137
+#line 135
await testRunner.AndAsync("the Account Info is displayed", ((string)(null)), table22, "And ");
#line hidden
-#line 140
+#line 138
await testRunner.WhenAsync("I click on the back button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 141
+#line 139
await testRunner.ThenAsync("the My Profile Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 142
+#line 140
await testRunner.WhenAsync("I click on the back button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 143
+#line 141
await testRunner.ThenAsync("the Merchant Home Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 144
+#line 142
await testRunner.WhenAsync("I tap on Transactions", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 145
+#line 143
await testRunner.ThenAsync("the Transaction Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 146
+#line 144
await testRunner.WhenAsync("I tap on the Mobile Topup button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 147
+#line 145
await testRunner.ThenAsync("the Transaction Select Mobile Topup Operator Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 148
+#line 146
await testRunner.WhenAsync("I tap on the \'Safaricom\' button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 149
+#line 147
await testRunner.ThenAsync("the Select Product Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 150
+#line 148
await testRunner.WhenAsync("I tap on the \'Custom\' product button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 151
+#line 149
await testRunner.ThenAsync("the Enter Topup Details Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 152
+#line 150
await testRunner.WhenAsync("I enter \'07777777775\' as the Customer Mobile Number", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 153
+#line 151
await testRunner.AndAsync("I enter 10.00 as the Topup Amount", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 154
+#line 152
await testRunner.AndAsync("I tap on Perform Topup", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 155
+#line 153
await testRunner.ThenAsync("the Mobile Topup Successful Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 156
+#line 154
await testRunner.AndAsync("I tap on Complete", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 157
+#line 155
await testRunner.ThenAsync("the Transaction Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 158
+#line 156
await testRunner.WhenAsync("I tap on the Voucher button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 159
+#line 157
await testRunner.ThenAsync("the Transaction Select Voucher Operator Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 160
+#line 158
await testRunner.WhenAsync("I tap on the \'Hospital 1 Contract\' button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 161
+#line 159
await testRunner.ThenAsync("the Select Product Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 162
+#line 160
await testRunner.WhenAsync("I tap on the \'10 KES\' product button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 163
+#line 161
await testRunner.ThenAsync("the Enter Voucher Issue Details Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 164
+#line 162
await testRunner.WhenAsync("I enter \'07777777775\' as the Recipient Mobile Number", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 165
+#line 163
await testRunner.AndAsync("I tap on Issue Voucher", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 166
+#line 164
await testRunner.ThenAsync("the Voucher Issue Successful Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 167
+#line 165
await testRunner.AndAsync("I tap on Complete", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 168
+#line 166
await testRunner.ThenAsync("the Transaction Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 169
+#line 167
await testRunner.WhenAsync("I tap on the Bill Payment button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 170
+#line 168
await testRunner.ThenAsync("the Transaction Select Bill Payment Operator Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 171
+#line 169
await testRunner.WhenAsync("I tap on the \'PataPawa PostPay\' button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 172
+#line 170
await testRunner.ThenAsync("the Select Product Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 173
+#line 171
await testRunner.WhenAsync("I tap on the \'Bill Pay (Post)\' product button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 174
+#line 172
await testRunner.ThenAsync("the Enter Account Details Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 175
+#line 173
await testRunner.WhenAsync("I enter \'12345678\' as the Account Number", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 176
+#line 174
await testRunner.AndAsync("I tap on the Get Account Button", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 177
+#line 175
await testRunner.ThenAsync("the Make Bill Payment page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
global::Reqnroll.Table table23 = new global::Reqnroll.Table(new string[] {
@@ -732,92 +741,92 @@ await testRunner.GivenAsync("I have a token to access the estate management and
"Test Account 1",
"Today",
"100.00"});
-#line 178
+#line 176
await testRunner.AndAsync("the following Bill Details are displayed", ((string)(null)), table23, "And ");
#line hidden
-#line 181
+#line 179
await testRunner.WhenAsync("I enter \'07777777775\' as the Customer Mobile Number", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 182
+#line 180
await testRunner.AndAsync("I enter 10.00 as the Payment Amount", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 183
+#line 181
await testRunner.AndAsync("I tap on the Make Payment Button", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 184
+#line 182
await testRunner.ThenAsync("the Bill Payment Successful Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 185
+#line 183
await testRunner.AndAsync("I tap on Complete", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 186
+#line 184
await testRunner.ThenAsync("the Transaction Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 187
+#line 185
await testRunner.WhenAsync("I tap on the Bill Payment button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 188
+#line 186
await testRunner.ThenAsync("the Transaction Select Bill Payment Operator Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 189
+#line 187
await testRunner.WhenAsync("I tap on the \'PataPawa PrePay\' button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 190
+#line 188
await testRunner.ThenAsync("the Select Product Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 191
+#line 189
await testRunner.WhenAsync("I tap on the \'Bill Pay (Pre)\' product button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 192
+#line 190
await testRunner.ThenAsync("the Enter Meter Details Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 193
+#line 191
await testRunner.WhenAsync("I enter \'00000001\' as the Meter Number", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 194
+#line 192
await testRunner.AndAsync("I tap on the Get Meter Button", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 195
+#line 193
await testRunner.ThenAsync("the Make Bill Payment page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
global::Reqnroll.Table table24 = new global::Reqnroll.Table(new string[] {
"MeterNumber"});
table24.AddRow(new string[] {
"00000001"});
-#line 196
+#line 194
await testRunner.AndAsync("the following Meter Details are displayed", ((string)(null)), table24, "And ");
#line hidden
-#line 199
+#line 197
await testRunner.WhenAsync("I enter 10.00 as the Payment Amount", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 200
+#line 198
await testRunner.AndAsync("I tap on the Make Payment Button", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 201
+#line 199
await testRunner.ThenAsync("the Bill Payment Successful Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 202
+#line 200
await testRunner.AndAsync("I tap on Complete", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
#line hidden
-#line 203
+#line 201
await testRunner.ThenAsync("the Transaction Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 204
+#line 202
await testRunner.WhenAsync("I click on the back button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 205
+#line 203
await testRunner.ThenAsync("the Merchant Home Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 206
+#line 204
await testRunner.WhenAsync("I click on the back button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 207
+#line 205
await testRunner.ThenAsync("A message is displayed confirming I want to log out", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
-#line 208
+#line 206
await testRunner.WhenAsync("I click yes", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
#line hidden
-#line 209
+#line 207
await testRunner.ThenAsync("the Login Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
#line hidden
}
diff --git a/TransactionProcessor.Mobile.UITests/Features/EndToEndTestsFeature.cs b/TransactionProcessor.Mobile.UITests/Features/EndToEndTestsFeature.cs
index 12a2c56c7..da6b892e7 100644
--- a/TransactionProcessor.Mobile.UITests/Features/EndToEndTestsFeature.cs
+++ b/TransactionProcessor.Mobile.UITests/Features/EndToEndTestsFeature.cs
@@ -4,7 +4,6 @@
namespace TransactionProcessor.Mobile.UITests.Features
{
[TestFixture(MobileTestPlatform.Android, Category = "Android")]
- //[TestFixture(MobileTestPlatform.iOS, Category = "iOS")]
[TestFixture(MobileTestPlatform.Windows, Category = "Windows")]
[NonParallelizable]
public partial class EndToEndTestsFeature : BaseTestFixture
diff --git a/TransactionProcessor.Mobile.UITests/Features/HardwarePageNavigation.feature.cs b/TransactionProcessor.Mobile.UITests/Features/HardwarePageNavigation.feature.cs
index 87f356e86..da2b9f772 100644
--- a/TransactionProcessor.Mobile.UITests/Features/HardwarePageNavigation.feature.cs
+++ b/TransactionProcessor.Mobile.UITests/Features/HardwarePageNavigation.feature.cs
@@ -1,8 +1,8 @@
// ------------------------------------------------------------------------------
//
-// This code was generated by Reqnroll (https://www.reqnroll.net/).
-// Reqnroll Version:2.0.0.0
-// Reqnroll Generator Version:2.0.0.0
+// This code was generated by Reqnroll (https://reqnroll.net/).
+// Reqnroll Version:3.0.0.0
+// Reqnroll Generator Version:3.0.0.0
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -15,20 +15,20 @@ namespace TransactionProcessor.Mobile.UITests.Features
{
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "2.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "3.0.0.0")]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [NUnit.Framework.TestFixtureAttribute()]
- [NUnit.Framework.DescriptionAttribute("HardwarePageNavigation")]
- [NUnit.Framework.FixtureLifeCycleAttribute(NUnit.Framework.LifeCycle.InstancePerTestCase)]
- [NUnit.Framework.CategoryAttribute("background")]
- [NUnit.Framework.CategoryAttribute("login")]
- [NUnit.Framework.CategoryAttribute("toolbar")]
- [NUnit.Framework.CategoryAttribute("profile")]
- [NUnit.Framework.CategoryAttribute("shared")]
- [NUnit.Framework.CategoryAttribute("transactions")]
- [NUnit.Framework.CategoryAttribute("sharedapp")]
- [NUnit.Framework.CategoryAttribute("base")]
- [NUnit.Framework.CategoryAttribute("reports")]
+ [global::NUnit.Framework.TestFixtureAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("HardwarePageNavigation")]
+ [global::NUnit.Framework.FixtureLifeCycleAttribute(global::NUnit.Framework.LifeCycle.InstancePerTestCase)]
+ [global::NUnit.Framework.CategoryAttribute("background")]
+ [global::NUnit.Framework.CategoryAttribute("login")]
+ [global::NUnit.Framework.CategoryAttribute("toolbar")]
+ [global::NUnit.Framework.CategoryAttribute("profile")]
+ [global::NUnit.Framework.CategoryAttribute("shared")]
+ [global::NUnit.Framework.CategoryAttribute("transactions")]
+ [global::NUnit.Framework.CategoryAttribute("sharedapp")]
+ [global::NUnit.Framework.CategoryAttribute("base")]
+ [global::NUnit.Framework.CategoryAttribute("reports")]
public partial class HardwarePageNavigationFeature
{
@@ -45,22 +45,23 @@ public partial class HardwarePageNavigationFeature
"base",
"reports"};
- private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new global::System.Globalization.CultureInfo("en-US"), "Features", "HardwarePageNavigation", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags);
+ private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new global::System.Globalization.CultureInfo("en-US"), "Features", "HardwarePageNavigation", "", global::Reqnroll.ProgrammingLanguage.CSharp, featureTags, InitializeCucumberMessages());
#line 1 "HardwarePageNavigation.feature"
#line hidden
- [NUnit.Framework.OneTimeSetUpAttribute()]
+ [global::NUnit.Framework.OneTimeSetUpAttribute()]
public static async global::System.Threading.Tasks.Task FeatureSetupAsync()
{
}
- [NUnit.Framework.OneTimeTearDownAttribute()]
+ [global::NUnit.Framework.OneTimeTearDownAttribute()]
public static async global::System.Threading.Tasks.Task FeatureTearDownAsync()
{
+ await global::Reqnroll.TestRunnerManager.ReleaseFeatureAsync(featureInfo);
}
- [NUnit.Framework.SetUpAttribute()]
+ [global::NUnit.Framework.SetUpAttribute()]
public async global::System.Threading.Tasks.Task TestInitializeAsync()
{
testRunner = global::Reqnroll.TestRunnerManager.GetTestRunnerForAssembly(featureHint: featureInfo);
@@ -86,7 +87,7 @@ public partial class HardwarePageNavigationFeature
}
}
- [NUnit.Framework.TearDownAttribute()]
+ [global::NUnit.Framework.TearDownAttribute()]
public async global::System.Threading.Tasks.Task TestTearDownAsync()
{
if ((testRunner == null))
@@ -104,10 +105,10 @@ public partial class HardwarePageNavigationFeature
}
}
- public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
+ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo, global::Reqnroll.RuleInfo ruleInfo)
{
- testRunner.OnScenarioInitialize(scenarioInfo);
- testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(NUnit.Framework.TestContext.CurrentContext);
+ testRunner.OnScenarioInitialize(scenarioInfo, ruleInfo);
+ testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(global::NUnit.Framework.TestContext.CurrentContext);
}
public async global::System.Threading.Tasks.Task ScenarioStartAsync()
@@ -120,21 +121,29 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
await testRunner.CollectScenarioErrorsAsync();
}
- [NUnit.Framework.TestAttribute()]
- [NUnit.Framework.DescriptionAttribute("Device Back Button from Home Page Screen")]
- [NUnit.Framework.CategoryAttribute("PRHWNavTest")]
+ private static global::Reqnroll.Formatters.RuntimeSupport.FeatureLevelCucumberMessages InitializeCucumberMessages()
+ {
+ return new global::Reqnroll.Formatters.RuntimeSupport.FeatureLevelCucumberMessages("Features/HardwarePageNavigation.feature.ndjson", 5);
+ }
+
+ [global::NUnit.Framework.TestAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("Device Back Button from Home Page Screen")]
+ [global::NUnit.Framework.CategoryAttribute("PRHWNavTest")]
public async global::System.Threading.Tasks.Task DeviceBackButtonFromHomePageScreen()
{
string[] tagsOfScenario = new string[] {
"PRHWNavTest"};
global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary();
- global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Device Back Button from Home Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags);
+ string pickleIndex = "0";
+ global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Device Back Button from Home Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex);
+ string[] tagsOfRule = ((string[])(null));
+ global::Reqnroll.RuleInfo ruleInfo = null;
#line 6
-this.ScenarioInitialize(scenarioInfo);
+this.ScenarioInitialize(scenarioInfo, ruleInfo);
#line hidden
if ((global::Reqnroll.TagHelper.ContainsIgnoreTag(scenarioInfo.CombinedTags) || global::Reqnroll.TagHelper.ContainsIgnoreTag(featureTags)))
{
- testRunner.SkipScenario();
+ await testRunner.SkipScenarioAsync();
}
else
{
@@ -185,21 +194,24 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
await this.ScenarioCleanupAsync();
}
- [NUnit.Framework.TestAttribute()]
- [NUnit.Framework.DescriptionAttribute("Back Button from Transaction Page Screen")]
- [NUnit.Framework.CategoryAttribute("PRHWNavTest")]
+ [global::NUnit.Framework.TestAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("Back Button from Transaction Page Screen")]
+ [global::NUnit.Framework.CategoryAttribute("PRHWNavTest")]
public async global::System.Threading.Tasks.Task BackButtonFromTransactionPageScreen()
{
string[] tagsOfScenario = new string[] {
"PRHWNavTest"};
global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary();
- global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Transaction Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags);
+ string pickleIndex = "1";
+ global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Transaction Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex);
+ string[] tagsOfRule = ((string[])(null));
+ global::Reqnroll.RuleInfo ruleInfo = null;
#line 24
-this.ScenarioInitialize(scenarioInfo);
+this.ScenarioInitialize(scenarioInfo, ruleInfo);
#line hidden
if ((global::Reqnroll.TagHelper.ContainsIgnoreTag(scenarioInfo.CombinedTags) || global::Reqnroll.TagHelper.ContainsIgnoreTag(featureTags)))
{
- testRunner.SkipScenario();
+ await testRunner.SkipScenarioAsync();
}
else
{
@@ -250,21 +262,24 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
await this.ScenarioCleanupAsync();
}
- [NUnit.Framework.TestAttribute()]
- [NUnit.Framework.DescriptionAttribute("Back Button from Reports Page Screen")]
- [NUnit.Framework.CategoryAttribute("PRHWNavTest")]
+ [global::NUnit.Framework.TestAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("Back Button from Reports Page Screen")]
+ [global::NUnit.Framework.CategoryAttribute("PRHWNavTest")]
public async global::System.Threading.Tasks.Task BackButtonFromReportsPageScreen()
{
string[] tagsOfScenario = new string[] {
"PRHWNavTest"};
global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary();
- global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Reports Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags);
+ string pickleIndex = "2";
+ global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Reports Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex);
+ string[] tagsOfRule = ((string[])(null));
+ global::Reqnroll.RuleInfo ruleInfo = null;
#line 42
-this.ScenarioInitialize(scenarioInfo);
+this.ScenarioInitialize(scenarioInfo, ruleInfo);
#line hidden
if ((global::Reqnroll.TagHelper.ContainsIgnoreTag(scenarioInfo.CombinedTags) || global::Reqnroll.TagHelper.ContainsIgnoreTag(featureTags)))
{
- testRunner.SkipScenario();
+ await testRunner.SkipScenarioAsync();
}
else
{
diff --git a/TransactionProcessor.Mobile.UITests/Features/IOSEndToEndTestsFeature.cs b/TransactionProcessor.Mobile.UITests/Features/IOSEndToEndTestsFeature.cs
deleted file mode 100644
index 09e20834d..000000000
--- a/TransactionProcessor.Mobile.UITests/Features/IOSEndToEndTestsFeature.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using TransactionProcessor.Mobile.UITests.Common;
-using TransactionProcessor.Mobile.UITests.Drivers;
-
-namespace TransactionProcessor.Mobile.UITests.Features;
-
-[TestFixture(MobileTestPlatform.Android, Category = "Android")]
-[TestFixture(MobileTestPlatform.iOS, Category = "iOS")]
-//[TestFixture(MobileTestPlatform.Windows, Category = "Windows")]
-[NonParallelizable]
-public partial class IOSEndToEndTestsFeature : BaseTestFixture
-{
- #region Constructors
-
- public IOSEndToEndTestsFeature(MobileTestPlatform mobileTestPlatform) : base(mobileTestPlatform)
- {
- }
-
- #endregion
-}
\ No newline at end of file
diff --git a/TransactionProcessor.Mobile.UITests/Features/PageNavigation.feature.cs b/TransactionProcessor.Mobile.UITests/Features/PageNavigation.feature.cs
index b86f91281..5d44407d0 100644
--- a/TransactionProcessor.Mobile.UITests/Features/PageNavigation.feature.cs
+++ b/TransactionProcessor.Mobile.UITests/Features/PageNavigation.feature.cs
@@ -1,8 +1,8 @@
// ------------------------------------------------------------------------------
//
-// This code was generated by Reqnroll (https://www.reqnroll.net/).
-// Reqnroll Version:2.0.0.0
-// Reqnroll Generator Version:2.0.0.0
+// This code was generated by Reqnroll (https://reqnroll.net/).
+// Reqnroll Version:3.0.0.0
+// Reqnroll Generator Version:3.0.0.0
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -15,21 +15,21 @@ namespace TransactionProcessor.Mobile.UITests.Features
{
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "2.0.0.0")]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "3.0.0.0")]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [NUnit.Framework.TestFixtureAttribute()]
- [NUnit.Framework.DescriptionAttribute("PageNavigation")]
- [NUnit.Framework.FixtureLifeCycleAttribute(NUnit.Framework.LifeCycle.InstancePerTestCase)]
- [NUnit.Framework.CategoryAttribute("background")]
- [NUnit.Framework.CategoryAttribute("login")]
- [NUnit.Framework.CategoryAttribute("toolbar")]
- [NUnit.Framework.CategoryAttribute("profile")]
- [NUnit.Framework.CategoryAttribute("shared")]
- [NUnit.Framework.CategoryAttribute("transactions")]
- [NUnit.Framework.CategoryAttribute("sharedapp")]
- [NUnit.Framework.CategoryAttribute("base")]
- [NUnit.Framework.CategoryAttribute("reports")]
- [NUnit.Framework.CategoryAttribute("support")]
+ [global::NUnit.Framework.TestFixtureAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("PageNavigation")]
+ [global::NUnit.Framework.FixtureLifeCycleAttribute(global::NUnit.Framework.LifeCycle.InstancePerTestCase)]
+ [global::NUnit.Framework.CategoryAttribute("background")]
+ [global::NUnit.Framework.CategoryAttribute("login")]
+ [global::NUnit.Framework.CategoryAttribute("toolbar")]
+ [global::NUnit.Framework.CategoryAttribute("profile")]
+ [global::NUnit.Framework.CategoryAttribute("shared")]
+ [global::NUnit.Framework.CategoryAttribute("transactions")]
+ [global::NUnit.Framework.CategoryAttribute("sharedapp")]
+ [global::NUnit.Framework.CategoryAttribute("base")]
+ [global::NUnit.Framework.CategoryAttribute("reports")]
+ [global::NUnit.Framework.CategoryAttribute("support")]
public partial class PageNavigationFeature
{
@@ -47,22 +47,23 @@ public partial class PageNavigationFeature
"reports",
"support"};
- private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new global::System.Globalization.CultureInfo("en-US"), "Features", "PageNavigation", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags);
+ private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new global::System.Globalization.CultureInfo("en-US"), "Features", "PageNavigation", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags, InitializeCucumberMessages());
#line 1 "PageNavigation.feature"
#line hidden
- [NUnit.Framework.OneTimeSetUpAttribute()]
+ [global::NUnit.Framework.OneTimeSetUpAttribute()]
public static async global::System.Threading.Tasks.Task FeatureSetupAsync()
{
}
- [NUnit.Framework.OneTimeTearDownAttribute()]
+ [global::NUnit.Framework.OneTimeTearDownAttribute()]
public static async global::System.Threading.Tasks.Task FeatureTearDownAsync()
{
+ await global::Reqnroll.TestRunnerManager.ReleaseFeatureAsync(featureInfo);
}
- [NUnit.Framework.SetUpAttribute()]
+ [global::NUnit.Framework.SetUpAttribute()]
public async global::System.Threading.Tasks.Task TestInitializeAsync()
{
testRunner = global::Reqnroll.TestRunnerManager.GetTestRunnerForAssembly(featureHint: featureInfo);
@@ -88,7 +89,7 @@ public partial class PageNavigationFeature
}
}
- [NUnit.Framework.TearDownAttribute()]
+ [global::NUnit.Framework.TearDownAttribute()]
public async global::System.Threading.Tasks.Task TestTearDownAsync()
{
if ((testRunner == null))
@@ -106,10 +107,10 @@ public partial class PageNavigationFeature
}
}
- public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
+ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo, global::Reqnroll.RuleInfo ruleInfo)
{
- testRunner.OnScenarioInitialize(scenarioInfo);
- testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(NUnit.Framework.TestContext.CurrentContext);
+ testRunner.OnScenarioInitialize(scenarioInfo, ruleInfo);
+ testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(global::NUnit.Framework.TestContext.CurrentContext);
}
public async global::System.Threading.Tasks.Task ScenarioStartAsync()
@@ -122,21 +123,29 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
await testRunner.CollectScenarioErrorsAsync();
}
- [NUnit.Framework.TestAttribute()]
- [NUnit.Framework.DescriptionAttribute("Back Button from Login Screen")]
- [NUnit.Framework.CategoryAttribute("PRNavTest")]
+ private static global::Reqnroll.Formatters.RuntimeSupport.FeatureLevelCucumberMessages InitializeCucumberMessages()
+ {
+ return new global::Reqnroll.Formatters.RuntimeSupport.FeatureLevelCucumberMessages("Features/PageNavigation.feature.ndjson", 8);
+ }
+
+ [global::NUnit.Framework.TestAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("Back Button from Login Screen")]
+ [global::NUnit.Framework.CategoryAttribute("PRNavTest")]
public async global::System.Threading.Tasks.Task BackButtonFromLoginScreen()
{
string[] tagsOfScenario = new string[] {
"PRNavTest"};
global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary();
- global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Login Screen", null, tagsOfScenario, argumentsOfScenario, featureTags);
+ string pickleIndex = "0";
+ global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Login Screen", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex);
+ string[] tagsOfRule = ((string[])(null));
+ global::Reqnroll.RuleInfo ruleInfo = null;
#line 5
-this.ScenarioInitialize(scenarioInfo);
+this.ScenarioInitialize(scenarioInfo, ruleInfo);
#line hidden
if ((global::Reqnroll.TagHelper.ContainsIgnoreTag(scenarioInfo.CombinedTags) || global::Reqnroll.TagHelper.ContainsIgnoreTag(featureTags)))
{
- testRunner.SkipScenario();
+ await testRunner.SkipScenarioAsync();
}
else
{
@@ -154,19 +163,22 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
await this.ScenarioCleanupAsync();
}
- [NUnit.Framework.TestAttribute()]
- [NUnit.Framework.DescriptionAttribute("Back Button from Home Page Screen")]
+ [global::NUnit.Framework.TestAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("Back Button from Home Page Screen")]
public async global::System.Threading.Tasks.Task BackButtonFromHomePageScreen()
{
string[] tagsOfScenario = ((string[])(null));
global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary();
- global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Home Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags);
+ string pickleIndex = "1";
+ global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Home Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex);
+ string[] tagsOfRule = ((string[])(null));
+ global::Reqnroll.RuleInfo ruleInfo = null;
#line 12
-this.ScenarioInitialize(scenarioInfo);
+this.ScenarioInitialize(scenarioInfo, ruleInfo);
#line hidden
if ((global::Reqnroll.TagHelper.ContainsIgnoreTag(scenarioInfo.CombinedTags) || global::Reqnroll.TagHelper.ContainsIgnoreTag(featureTags)))
{
- testRunner.SkipScenario();
+ await testRunner.SkipScenarioAsync();
}
else
{
@@ -217,21 +229,24 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
await this.ScenarioCleanupAsync();
}
- [NUnit.Framework.TestAttribute()]
- [NUnit.Framework.DescriptionAttribute("Back Button from Transaction Page Screen")]
- [NUnit.Framework.CategoryAttribute("PRNavTest")]
+ [global::NUnit.Framework.TestAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("Back Button from Transaction Page Screen")]
+ [global::NUnit.Framework.CategoryAttribute("PRNavTest")]
public async global::System.Threading.Tasks.Task BackButtonFromTransactionPageScreen()
{
string[] tagsOfScenario = new string[] {
"PRNavTest"};
global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary();
- global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Transaction Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags);
+ string pickleIndex = "2";
+ global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Transaction Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex);
+ string[] tagsOfRule = ((string[])(null));
+ global::Reqnroll.RuleInfo ruleInfo = null;
#line 30
-this.ScenarioInitialize(scenarioInfo);
+this.ScenarioInitialize(scenarioInfo, ruleInfo);
#line hidden
if ((global::Reqnroll.TagHelper.ContainsIgnoreTag(scenarioInfo.CombinedTags) || global::Reqnroll.TagHelper.ContainsIgnoreTag(featureTags)))
{
- testRunner.SkipScenario();
+ await testRunner.SkipScenarioAsync();
}
else
{
@@ -282,21 +297,24 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
await this.ScenarioCleanupAsync();
}
- [NUnit.Framework.TestAttribute()]
- [NUnit.Framework.DescriptionAttribute("Back Button from Reports Page Screen")]
- [NUnit.Framework.CategoryAttribute("PRNavTest")]
+ [global::NUnit.Framework.TestAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("Back Button from Reports Page Screen")]
+ [global::NUnit.Framework.CategoryAttribute("PRNavTest")]
public async global::System.Threading.Tasks.Task BackButtonFromReportsPageScreen()
{
string[] tagsOfScenario = new string[] {
"PRNavTest"};
global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary();
- global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Reports Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags);
+ string pickleIndex = "3";
+ global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Reports Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex);
+ string[] tagsOfRule = ((string[])(null));
+ global::Reqnroll.RuleInfo ruleInfo = null;
#line 48
-this.ScenarioInitialize(scenarioInfo);
+this.ScenarioInitialize(scenarioInfo, ruleInfo);
#line hidden
if ((global::Reqnroll.TagHelper.ContainsIgnoreTag(scenarioInfo.CombinedTags) || global::Reqnroll.TagHelper.ContainsIgnoreTag(featureTags)))
{
- testRunner.SkipScenario();
+ await testRunner.SkipScenarioAsync();
}
else
{
@@ -347,21 +365,24 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
await this.ScenarioCleanupAsync();
}
- [NUnit.Framework.TestAttribute()]
- [NUnit.Framework.DescriptionAttribute("Back Button from Profile Page Screen")]
- [NUnit.Framework.CategoryAttribute("PRNavTest")]
+ [global::NUnit.Framework.TestAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("Back Button from Profile Page Screen")]
+ [global::NUnit.Framework.CategoryAttribute("PRNavTest")]
public async global::System.Threading.Tasks.Task BackButtonFromProfilePageScreen()
{
string[] tagsOfScenario = new string[] {
"PRNavTest"};
global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary();
- global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Profile Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags);
+ string pickleIndex = "4";
+ global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Profile Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex);
+ string[] tagsOfRule = ((string[])(null));
+ global::Reqnroll.RuleInfo ruleInfo = null;
#line 66
-this.ScenarioInitialize(scenarioInfo);
+this.ScenarioInitialize(scenarioInfo, ruleInfo);
#line hidden
if ((global::Reqnroll.TagHelper.ContainsIgnoreTag(scenarioInfo.CombinedTags) || global::Reqnroll.TagHelper.ContainsIgnoreTag(featureTags)))
{
- testRunner.SkipScenario();
+ await testRunner.SkipScenarioAsync();
}
else
{
@@ -436,21 +457,24 @@ public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
await this.ScenarioCleanupAsync();
}
- [NUnit.Framework.TestAttribute()]
- [NUnit.Framework.DescriptionAttribute("Back Button from Support Page Screen")]
- [NUnit.Framework.CategoryAttribute("PRNavTest")]
+ [global::NUnit.Framework.TestAttribute()]
+ [global::NUnit.Framework.DescriptionAttribute("Back Button from Support Page Screen")]
+ [global::NUnit.Framework.CategoryAttribute("PRNavTest")]
public async global::System.Threading.Tasks.Task BackButtonFromSupportPageScreen()
{
string[] tagsOfScenario = new string[] {
"PRNavTest"};
global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary();
- global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Support Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags);
+ string pickleIndex = "5";
+ global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("Back Button from Support Page Screen", null, tagsOfScenario, argumentsOfScenario, featureTags, pickleIndex);
+ string[] tagsOfRule = ((string[])(null));
+ global::Reqnroll.RuleInfo ruleInfo = null;
#line 92
-this.ScenarioInitialize(scenarioInfo);
+this.ScenarioInitialize(scenarioInfo, ruleInfo);
#line hidden
if ((global::Reqnroll.TagHelper.ContainsIgnoreTag(scenarioInfo.CombinedTags) || global::Reqnroll.TagHelper.ContainsIgnoreTag(featureTags)))
{
- testRunner.SkipScenario();
+ await testRunner.SkipScenarioAsync();
}
else
{
diff --git a/TransactionProcessor.Mobile.UITests/Features/PageNavigationFeature.cs b/TransactionProcessor.Mobile.UITests/Features/PageNavigationFeature.cs
index e4ebff43c..aaa5ce06b 100644
--- a/TransactionProcessor.Mobile.UITests/Features/PageNavigationFeature.cs
+++ b/TransactionProcessor.Mobile.UITests/Features/PageNavigationFeature.cs
@@ -4,7 +4,6 @@
namespace TransactionProcessor.Mobile.UITests.Features;
[TestFixture(MobileTestPlatform.Android, Category = "Android")]
-[TestFixture(MobileTestPlatform.iOS, Category = "iOS")]
[TestFixture(MobileTestPlatform.Windows, Category = "Windows")]
[NonParallelizable]
public partial class PageNavigationFeature : BaseTestFixture
diff --git a/TransactionProcessor.Mobile.UITests/Features/iOSEndToEndTests.feature b/TransactionProcessor.Mobile.UITests/Features/iOSEndToEndTests.feature
deleted file mode 100644
index b4e6492a5..000000000
--- a/TransactionProcessor.Mobile.UITests/Features/iOSEndToEndTests.feature
+++ /dev/null
@@ -1,99 +0,0 @@
-@background @login @toolbar @profile @base @sharedapp @shared @transactions
-Feature: iOSEndToEndTests
-
-Background:
-
-
-
-@iOSPRTest
-Scenario: EndToEnd Training Mode
- Given I am on the Login Screen
- And the application is in training mode
- When I enter 'user1' as the Email Address
- And I enter '123456' as the Password
- And I tap on Login
- Then the Merchant Home Page is displayed
- When I tap on Profile
- Then the My Profile Page is displayed
- When I tap on the Addresses button
- Then the Address List Page is displayed
- And the Primary Address is displayed
- | AddressLine1 | AddressTown |
- | test address line 1 | Town |
- When I click on the back button
- Then the My Profile Page is displayed
- When I tap on the Account Info button
- Then the Account Info Page is displayed
- And the Account Info is displayed
- | Name | Balance | AvailableBalance |
- | Dummy Merchant | 99 | 100 |
- When I click on the back button
- Then the My Profile Page is displayed
- When I click on the back button
- Then the Merchant Home Page is displayed
- When I tap on Transactions
- Then the Transaction Page is displayed
- When I tap on the Mobile Topup button
- Then the Transaction Select Mobile Topup Operator Page is displayed
- When I tap on the 'Safaricom' button
- Then the Select Product Page is displayed
- When I tap on the 'Custom' product button
- Then the Enter Topup Details Page is displayed
- When I enter '07777777775' as the Customer Mobile Number
- And I enter 10.00 as the Topup Amount
- And I tap on Perform Topup
- Then the Mobile Topup Successful Page is displayed
- And I tap on Complete
- Then the Transaction Page is displayed
- When I tap on the Voucher button
- Then the Transaction Select Voucher Operator Page is displayed
- When I tap on the 'Hospital 1 Contract' button
- Then the Select Product Page is displayed
- When I tap on the '10 KES' product button
- Then the Enter Voucher Issue Details Page is displayed
- When I enter '07777777775' as the Recipient Mobile Number
- And I tap on Issue Voucher
- Then the Voucher Issue Successful Page is displayed
- And I tap on Complete
- Then the Transaction Page is displayed
- When I tap on the Bill Payment button
- Then the Transaction Select Bill Payment Operator Page is displayed
- When I tap on the 'Pata Pawa PostPay' button
- Then the Select Product Page is displayed
- When I tap on the 'Bill Pay (Post)' product button
- Then the Enter Account Details Page is displayed
- When I enter '12345678' as the Account Number
- And I tap on the Get Account Button
- Then the Make Bill Payment page is displayed
- And the following Bill Details are displayed
- | AccountNumber | AccountHolder | DueDate | Balance |
- | 12345678 | Mr Test Customer | 2025-04-17 | 100.00 |
- When I enter '07777777775' as the Customer Mobile Number
- And I enter 10.00 as the Payment Amount
- And I tap on the Make Payment Button
- Then the Bill Payment Successful Page is displayed
- And I tap on Complete
- Then the Transaction Page is displayed
- When I tap on the Bill Payment button
- Then the Transaction Select Bill Payment Operator Page is displayed
- When I tap on the 'Pata Pawa PrePay' button
- Then the Select Product Page is displayed
- When I tap on the 'Bill Pay (Pre)' product button
- Then the Enter Meter Details Page is displayed
- When I enter '00000001' as the Meter Number
- And I tap on the Get Meter Button
- Then the Make Bill Payment page is displayed
- And the following Meter Details are displayed
- | MeterNumber |
- | 00000001 |
- When I enter 10.00 as the Payment Amount
- And I tap on the Make Payment Button
- Then the Bill Payment Successful Page is displayed
- And I tap on Complete
- Then the Transaction Page is displayed
- When I click on the back button
- Then the Merchant Home Page is displayed
- #When I click on the back button
- #Then A message is displayed confirming I want to log out
- #When I click yes
- #Then the Login Page is displayed
\ No newline at end of file
diff --git a/TransactionProcessor.Mobile.UITests/Features/iOSEndToEndTests.feature.cs b/TransactionProcessor.Mobile.UITests/Features/iOSEndToEndTests.feature.cs
deleted file mode 100644
index d10d0eb1a..000000000
--- a/TransactionProcessor.Mobile.UITests/Features/iOSEndToEndTests.feature.cs
+++ /dev/null
@@ -1,417 +0,0 @@
-// ------------------------------------------------------------------------------
-//
-// This code was generated by Reqnroll (https://www.reqnroll.net/).
-// Reqnroll Version:2.0.0.0
-// Reqnroll Generator Version:2.0.0.0
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-// ------------------------------------------------------------------------------
-#region Designer generated code
-#pragma warning disable
-using Reqnroll;
-namespace TransactionProcessor.Mobile.UITests.Features
-{
-
-
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Reqnroll", "2.0.0.0")]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [NUnit.Framework.TestFixtureAttribute()]
- [NUnit.Framework.DescriptionAttribute("iOSEndToEndTests")]
- [NUnit.Framework.FixtureLifeCycleAttribute(NUnit.Framework.LifeCycle.InstancePerTestCase)]
- [NUnit.Framework.CategoryAttribute("background")]
- [NUnit.Framework.CategoryAttribute("login")]
- [NUnit.Framework.CategoryAttribute("toolbar")]
- [NUnit.Framework.CategoryAttribute("profile")]
- [NUnit.Framework.CategoryAttribute("base")]
- [NUnit.Framework.CategoryAttribute("sharedapp")]
- [NUnit.Framework.CategoryAttribute("shared")]
- [NUnit.Framework.CategoryAttribute("transactions")]
- public partial class IOSEndToEndTestsFeature
- {
-
- private global::Reqnroll.ITestRunner testRunner;
-
- private static string[] featureTags = new string[] {
- "background",
- "login",
- "toolbar",
- "profile",
- "base",
- "sharedapp",
- "shared",
- "transactions"};
-
- private static global::Reqnroll.FeatureInfo featureInfo = new global::Reqnroll.FeatureInfo(new global::System.Globalization.CultureInfo("en-US"), "Features", "iOSEndToEndTests", null, global::Reqnroll.ProgrammingLanguage.CSharp, featureTags);
-
-#line 1 "iOSEndToEndTests.feature"
-#line hidden
-
- [NUnit.Framework.OneTimeSetUpAttribute()]
- public static async global::System.Threading.Tasks.Task FeatureSetupAsync()
- {
- }
-
- [NUnit.Framework.OneTimeTearDownAttribute()]
- public static async global::System.Threading.Tasks.Task FeatureTearDownAsync()
- {
- }
-
- [NUnit.Framework.SetUpAttribute()]
- public async global::System.Threading.Tasks.Task TestInitializeAsync()
- {
- testRunner = global::Reqnroll.TestRunnerManager.GetTestRunnerForAssembly(featureHint: featureInfo);
- try
- {
- if (((testRunner.FeatureContext != null)
- && (testRunner.FeatureContext.FeatureInfo.Equals(featureInfo) == false)))
- {
- await testRunner.OnFeatureEndAsync();
- }
- }
- finally
- {
- if (((testRunner.FeatureContext != null)
- && testRunner.FeatureContext.BeforeFeatureHookFailed))
- {
- throw new global::Reqnroll.ReqnrollException("Scenario skipped because of previous before feature hook error");
- }
- if ((testRunner.FeatureContext == null))
- {
- await testRunner.OnFeatureStartAsync(featureInfo);
- }
- }
- }
-
- [NUnit.Framework.TearDownAttribute()]
- public async global::System.Threading.Tasks.Task TestTearDownAsync()
- {
- if ((testRunner == null))
- {
- return;
- }
- try
- {
- await testRunner.OnScenarioEndAsync();
- }
- finally
- {
- global::Reqnroll.TestRunnerManager.ReleaseTestRunner(testRunner);
- testRunner = null;
- }
- }
-
- public void ScenarioInitialize(global::Reqnroll.ScenarioInfo scenarioInfo)
- {
- testRunner.OnScenarioInitialize(scenarioInfo);
- testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(NUnit.Framework.TestContext.CurrentContext);
- }
-
- public async global::System.Threading.Tasks.Task ScenarioStartAsync()
- {
- await testRunner.OnScenarioStartAsync();
- }
-
- public async global::System.Threading.Tasks.Task ScenarioCleanupAsync()
- {
- await testRunner.CollectScenarioErrorsAsync();
- }
-
- public virtual async global::System.Threading.Tasks.Task FeatureBackgroundAsync()
- {
-#line 4
-#line hidden
- }
-
- [NUnit.Framework.TestAttribute()]
- [NUnit.Framework.DescriptionAttribute("EndToEnd Training Mode")]
- [NUnit.Framework.CategoryAttribute("iOSPRTest")]
- public async global::System.Threading.Tasks.Task EndToEndTrainingMode()
- {
- string[] tagsOfScenario = new string[] {
- "iOSPRTest"};
- global::System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new global::System.Collections.Specialized.OrderedDictionary();
- global::Reqnroll.ScenarioInfo scenarioInfo = new global::Reqnroll.ScenarioInfo("EndToEnd Training Mode", null, tagsOfScenario, argumentsOfScenario, featureTags);
-#line 9
-this.ScenarioInitialize(scenarioInfo);
-#line hidden
- if ((global::Reqnroll.TagHelper.ContainsIgnoreTag(scenarioInfo.CombinedTags) || global::Reqnroll.TagHelper.ContainsIgnoreTag(featureTags)))
- {
- testRunner.SkipScenario();
- }
- else
- {
- await this.ScenarioStartAsync();
-#line 4
-await this.FeatureBackgroundAsync();
-#line hidden
-#line 10
- await testRunner.GivenAsync("I am on the Login Screen", ((string)(null)), ((global::Reqnroll.Table)(null)), "Given ");
-#line hidden
-#line 11
- await testRunner.AndAsync("the application is in training mode", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 12
- await testRunner.WhenAsync("I enter \'user1\' as the Email Address", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 13
- await testRunner.AndAsync("I enter \'123456\' as the Password", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 14
- await testRunner.AndAsync("I tap on Login", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 15
- await testRunner.ThenAsync("the Merchant Home Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 16
- await testRunner.WhenAsync("I tap on Profile", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 17
- await testRunner.ThenAsync("the My Profile Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 18
- await testRunner.WhenAsync("I tap on the Addresses button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 19
- await testRunner.ThenAsync("the Address List Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
- global::Reqnroll.Table table25 = new global::Reqnroll.Table(new string[] {
- "AddressLine1",
- "AddressTown"});
- table25.AddRow(new string[] {
- "test address line 1",
- "Town"});
-#line 20
- await testRunner.AndAsync("the Primary Address is displayed", ((string)(null)), table25, "And ");
-#line hidden
-#line 23
- await testRunner.WhenAsync("I click on the back button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 24
- await testRunner.ThenAsync("the My Profile Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 25
- await testRunner.WhenAsync("I tap on the Account Info button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 26
- await testRunner.ThenAsync("the Account Info Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
- global::Reqnroll.Table table26 = new global::Reqnroll.Table(new string[] {
- "Name",
- "Balance",
- "AvailableBalance"});
- table26.AddRow(new string[] {
- "Dummy Merchant",
- "99",
- "100"});
-#line 27
- await testRunner.AndAsync("the Account Info is displayed", ((string)(null)), table26, "And ");
-#line hidden
-#line 30
- await testRunner.WhenAsync("I click on the back button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 31
- await testRunner.ThenAsync("the My Profile Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 32
- await testRunner.WhenAsync("I click on the back button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 33
- await testRunner.ThenAsync("the Merchant Home Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 34
- await testRunner.WhenAsync("I tap on Transactions", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 35
- await testRunner.ThenAsync("the Transaction Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 36
- await testRunner.WhenAsync("I tap on the Mobile Topup button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 37
- await testRunner.ThenAsync("the Transaction Select Mobile Topup Operator Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 38
- await testRunner.WhenAsync("I tap on the \'Safaricom\' button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 39
- await testRunner.ThenAsync("the Select Product Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 40
- await testRunner.WhenAsync("I tap on the \'Custom\' product button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 41
- await testRunner.ThenAsync("the Enter Topup Details Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 42
- await testRunner.WhenAsync("I enter \'07777777775\' as the Customer Mobile Number", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 43
- await testRunner.AndAsync("I enter 10.00 as the Topup Amount", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 44
- await testRunner.AndAsync("I tap on Perform Topup", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 45
- await testRunner.ThenAsync("the Mobile Topup Successful Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 46
- await testRunner.AndAsync("I tap on Complete", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 47
- await testRunner.ThenAsync("the Transaction Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 48
- await testRunner.WhenAsync("I tap on the Voucher button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 49
- await testRunner.ThenAsync("the Transaction Select Voucher Operator Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 50
- await testRunner.WhenAsync("I tap on the \'Hospital 1 Contract\' button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 51
- await testRunner.ThenAsync("the Select Product Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 52
- await testRunner.WhenAsync("I tap on the \'10 KES\' product button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 53
- await testRunner.ThenAsync("the Enter Voucher Issue Details Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 54
- await testRunner.WhenAsync("I enter \'07777777775\' as the Recipient Mobile Number", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 55
- await testRunner.AndAsync("I tap on Issue Voucher", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 56
- await testRunner.ThenAsync("the Voucher Issue Successful Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 57
- await testRunner.AndAsync("I tap on Complete", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 58
- await testRunner.ThenAsync("the Transaction Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 59
- await testRunner.WhenAsync("I tap on the Bill Payment button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 60
- await testRunner.ThenAsync("the Transaction Select Bill Payment Operator Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 61
- await testRunner.WhenAsync("I tap on the \'Pata Pawa PostPay\' button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 62
- await testRunner.ThenAsync("the Select Product Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 63
- await testRunner.WhenAsync("I tap on the \'Bill Pay (Post)\' product button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 64
- await testRunner.ThenAsync("the Enter Account Details Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 65
- await testRunner.WhenAsync("I enter \'12345678\' as the Account Number", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 66
- await testRunner.AndAsync("I tap on the Get Account Button", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 67
- await testRunner.ThenAsync("the Make Bill Payment page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
- global::Reqnroll.Table table27 = new global::Reqnroll.Table(new string[] {
- "AccountNumber",
- "AccountHolder",
- "DueDate",
- "Balance"});
- table27.AddRow(new string[] {
- "12345678",
- "Mr Test Customer",
- "2025-04-17",
- "100.00"});
-#line 68
- await testRunner.AndAsync("the following Bill Details are displayed", ((string)(null)), table27, "And ");
-#line hidden
-#line 71
- await testRunner.WhenAsync("I enter \'07777777775\' as the Customer Mobile Number", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 72
- await testRunner.AndAsync("I enter 10.00 as the Payment Amount", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 73
- await testRunner.AndAsync("I tap on the Make Payment Button", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 74
- await testRunner.ThenAsync("the Bill Payment Successful Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 75
- await testRunner.AndAsync("I tap on Complete", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 76
- await testRunner.ThenAsync("the Transaction Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 77
- await testRunner.WhenAsync("I tap on the Bill Payment button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 78
- await testRunner.ThenAsync("the Transaction Select Bill Payment Operator Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 79
- await testRunner.WhenAsync("I tap on the \'Pata Pawa PrePay\' button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 80
- await testRunner.ThenAsync("the Select Product Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 81
- await testRunner.WhenAsync("I tap on the \'Bill Pay (Pre)\' product button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 82
- await testRunner.ThenAsync("the Enter Meter Details Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 83
- await testRunner.WhenAsync("I enter \'00000001\' as the Meter Number", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 84
- await testRunner.AndAsync("I tap on the Get Meter Button", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 85
- await testRunner.ThenAsync("the Make Bill Payment page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
- global::Reqnroll.Table table28 = new global::Reqnroll.Table(new string[] {
- "MeterNumber"});
- table28.AddRow(new string[] {
- "00000001"});
-#line 86
- await testRunner.AndAsync("the following Meter Details are displayed", ((string)(null)), table28, "And ");
-#line hidden
-#line 89
- await testRunner.WhenAsync("I enter 10.00 as the Payment Amount", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 90
- await testRunner.AndAsync("I tap on the Make Payment Button", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 91
- await testRunner.ThenAsync("the Bill Payment Successful Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 92
- await testRunner.AndAsync("I tap on Complete", ((string)(null)), ((global::Reqnroll.Table)(null)), "And ");
-#line hidden
-#line 93
- await testRunner.ThenAsync("the Transaction Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
-#line 94
- await testRunner.WhenAsync("I click on the back button", ((string)(null)), ((global::Reqnroll.Table)(null)), "When ");
-#line hidden
-#line 95
- await testRunner.ThenAsync("the Merchant Home Page is displayed", ((string)(null)), ((global::Reqnroll.Table)(null)), "Then ");
-#line hidden
- }
- await this.ScenarioCleanupAsync();
- }
- }
-}
-#pragma warning restore
-#endregion
diff --git a/TransactionProcessor.Mobile.UITests/Pages/BasePage.cs b/TransactionProcessor.Mobile.UITests/Pages/BasePage.cs
index f88bb6837..9620f2c80 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/BasePage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/BasePage.cs
@@ -44,10 +44,6 @@ public void HideKeyboard()
{
AppiumDriverWrapper.Driver.HideKeyboard();
}
- else if (AppiumDriverWrapper.MobileTestPlatform == MobileTestPlatform.iOS)
- {
- AppiumDriverWrapper.Driver.FindElement(By.Name("Done")).Click();
- }
}
public async Task AcceptAlert()
@@ -110,123 +106,4 @@ internal async Task WaitForElementByAccessibilityId(String accessib
//}
}
-
- //public abstract class BasePage
- //{
- // protected readonly TestingContext TestingContext;
-
- // protected abstract String Trait { get; }
-
- // public BasePage(TestingContext testingContext){
- // this.TestingContext = testingContext;
- // }
-
- // public async Task AssertOnPage(TimeSpan? timeout = null){
- // var retryFor = timeout switch{
- // null => TimeSpan.FromMinutes(3),
- // _ => timeout.Value
- // };
-
- // await Retry.For(async () =>
- // {
- // String message = $"Unable to verify on page: {this.GetType().Name} with trait {this.Trait} {Environment.NewLine} Source: {AppiumDriverWrapper.Driver.PageSource}";
-
- // Should.NotThrow(() => this.WaitForElementByAccessibilityId(this.Trait), message);
- // },
- // retryFor,
- // TimeSpan.FromSeconds(60)).ConfigureAwait(false);
- // }
-
- // ///
- // /// Verifies that the trait is no longer present. Defaults to a 5 second wait.
- // ///
- // /// Time to wait before the assertion fails
- // public async Task WaitForPageToLeave(TimeSpan? timeout = null)
- // {
- // var retryFor = timeout switch
- // {
- // null => TimeSpan.FromSeconds(60),
- // _ => timeout.Value
- // };
-
- // String message = "Unable to verify *not* on page: " + this.GetType().Name;
- // await Retry.For(async () => { Should.NotThrow(() => this.WaitForNoElementByAccessibilityId(this.Trait), message); }, retryFor);
- // }
-
- // public async Task WaitForElementByAccessibilityId(String accessibilityId, TimeSpan? timeout = null, Int32 i = 0) {
- // return await AppiumDriverWrapper.Driver.WaitForElementByAccessibilityId(accessibilityId, timeout,i);
- // }
-
- // public async Task GetPageSource()
- // {
- // return await AppiumDriverWrapper.Driver.GetPageSource();
- // }
-
- // public async Task WaitForNoElementByAccessibilityId(String accessibilityId)
- // {
- // await AppiumDriverWrapper.Driver.WaitForNoElementByAccessibilityId(accessibilityId);
- // }
-
- // public async Task WaitForToastMessage(String toastMessage)
- // {
- // await AppiumDriverWrapper.Driver.WaitForToastMessage(AppiumDriverWrapper.MobileTestPlatform, toastMessage);
- // }
-
- // public void HideKeyboard()
- // {
- // if (AppiumDriverWrapper.MobileTestPlatform == MobileTestPlatform.Android)
- // {
- // AppiumDriverWrapper.Driver.HideKeyboard();
- // }
- // else if (AppiumDriverWrapper.MobileTestPlatform == MobileTestPlatform.iOS)
- // {
- // AppiumDriverWrapper.Driver.FindElement(By.Name("Done")).Click();
- // }
- // }
-
- // public async Task AcceptAlert(){
- // if (AppiumDriverWrapper.MobileTestPlatform == MobileTestPlatform.Windows)
- // {
- // IWebElement acceptButton = await AppiumDriverWrapper.Driver.WaitForElementByAccessibilityId("PrimaryButton");
- // acceptButton.Click();
- // }
- // else{
- // IAlert a = await this.SwitchToAlert();
- // a.Accept();
- // }
- // }
-
- // public async Task DismissAlert()
- // {
- // if (AppiumDriverWrapper.MobileTestPlatform == MobileTestPlatform.Windows)
- // {
- // IWebElement acceptButton = await AppiumDriverWrapper.Driver.WaitForElementByAccessibilityId("SecondaryButton");
- // acceptButton.Click();
- // }
- // else{
- // IAlert a = await this.SwitchToAlert();
- // a.Dismiss();
- // }
- // }
-
- // public async Task SwitchToAlert(){
- // IAlert alert = null;
- // await Retry.For(async () => {
- // alert = AppiumDriverWrapper.Driver.SwitchTo().Alert();
- // alert.ShouldNotBeNull();
- // });
- // return alert;
- // }
-
- // public void NavigateBack()
- // {
- // AppiumDriverWrapper.Driver.Navigate().Back();
- // }
-
- // public async Task GetLabelValue(String labelAutomationId)
- // {
- // IWebElement element = await this.WaitForElementByAccessibilityId(labelAutomationId);
- // return element.Text;
- // }
- //}
}
diff --git a/TransactionProcessor.Mobile.UITests/Pages/Extenstions.cs b/TransactionProcessor.Mobile.UITests/Pages/Extenstions.cs
index ce5ace7e9..189db81df 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/Extenstions.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/Extenstions.cs
@@ -200,27 +200,6 @@ await Retry.For(async () =>
});
}
- else if (platform == MobileTestPlatform.iOS)
- {
- Boolean isDisplayed = false;
- int count = 0;
- do
- {
- if (driver.PageSource.Contains(expectedToast))
- {
- Console.WriteLine(driver.PageSource);
- isDisplayed = true;
- break;
- }
-
- Thread.Sleep(200); //Add your custom wait if exists
- count++;
-
- } while (count < 10);
-
- Console.WriteLine(driver.PageSource);
- isDisplayed.ShouldBeTrue();
- }
}
public static async Task GetPageSource(this AppiumDriver driver)
{
diff --git a/TransactionProcessor.Mobile.UITests/Pages/LoginPage.cs b/TransactionProcessor.Mobile.UITests/Pages/LoginPage.cs
index aabea8f81..bc77fe223 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/LoginPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/LoginPage.cs
@@ -5,12 +5,8 @@
namespace TransactionProcessor.Mobile.UITests.Pages;
-public class LoginPage : BasePage2
-{
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch {
- MobileTestPlatform.iOS => "LoginLabel",
- _ => "LoginLabel"
- };
+public class LoginPage : BasePage2 {
+ protected override String Trait => "LoginLabel";
private readonly String UserNameEntry;
private readonly String PasswordEntry;
@@ -52,14 +48,6 @@ public async Task IsTrainingModeOn()
return true;
}
- if (AppiumDriverWrapper.MobileTestPlatform == MobileTestPlatform.iOS) {
- String? text = element.GetAttribute("value");
- if (text == "0") {
- return false;
- }
-
- return true;
- }
if (AppiumDriverWrapper.MobileTestPlatform == MobileTestPlatform.Windows){
return false;
diff --git a/TransactionProcessor.Mobile.UITests/Pages/ProfileAccountInfoPage.cs b/TransactionProcessor.Mobile.UITests/Pages/ProfileAccountInfoPage.cs
index 083fbbb1b..ae72bf251 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/ProfileAccountInfoPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/ProfileAccountInfoPage.cs
@@ -36,11 +36,7 @@ public ProfileAccountInfoPage(TestingContext testingContext) : base(testingConte
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "My Details",
- _ => "MyDetails"
- };
+ protected override String Trait => "MyDetails";
#endregion
diff --git a/TransactionProcessor.Mobile.UITests/Pages/ProfileAddressesPage.cs b/TransactionProcessor.Mobile.UITests/Pages/ProfileAddressesPage.cs
index 2755d896d..7f54d3410 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/ProfileAddressesPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/ProfileAddressesPage.cs
@@ -43,11 +43,7 @@ public ProfileAddressesPage(TestingContext testingContext) : base(testingContext
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "My Addresses",
- _ => "MyAddresses"
- };
+ protected override String Trait => "MyAddresses";
#endregion
diff --git a/TransactionProcessor.Mobile.UITests/Pages/ProfileContactsPage.cs b/TransactionProcessor.Mobile.UITests/Pages/ProfileContactsPage.cs
index 3789c9cfd..2cbb8c3f5 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/ProfileContactsPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/ProfileContactsPage.cs
@@ -32,11 +32,7 @@ public ProfileContactsPage(TestingContext testingContext) : base(testingContext)
#region Properties
//protected override String Trait => "MyContacts";
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "My Contacts",
- _ => "MyContacts"
- };
+ protected override String Trait => "MyContacts";
#endregion
diff --git a/TransactionProcessor.Mobile.UITests/Pages/SalesAnalysisPage.cs b/TransactionProcessor.Mobile.UITests/Pages/SalesAnalysisPage.cs
index 9c31238d4..a1dc02cfc 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/SalesAnalysisPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/SalesAnalysisPage.cs
@@ -5,11 +5,7 @@ namespace TransactionProcessor.Mobile.UITests.Pages;
public class SalesAnalysisPage : BasePage2
{
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Sales Analysis",
- _ => "SalesAnalysis"
- };
+ protected override String Trait => "SalesAnalysis";
public SalesAnalysisPage(TestingContext testingContext) : base(testingContext)
{
diff --git a/TransactionProcessor.Mobile.UITests/Pages/TransactionsBillPaymentSelectOperatorPage.cs b/TransactionProcessor.Mobile.UITests/Pages/TransactionsBillPaymentSelectOperatorPage.cs
index 6786547b4..3564fefa7 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/TransactionsBillPaymentSelectOperatorPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/TransactionsBillPaymentSelectOperatorPage.cs
@@ -14,11 +14,7 @@ public TransactionsBillPaymentSelectOperatorPage(TestingContext testingContext)
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Select an Operator",
- _ => "SelectanOperator"
- };
+ protected override String Trait => "SelectanOperator";
#endregion
@@ -54,11 +50,7 @@ public TransactionsBillPaymentEnterAccountDetailsPage(TestingContext testingCont
this.GetAccountButton = "GetAccountButton";
}
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Get Customer Account",
- _ => "GetCustomerAccount"
- };
+ protected override String Trait => "GetCustomerAccount";
public async Task EnterCustomerAccountNumber(String customerAccountNumber)
{
@@ -89,11 +81,7 @@ public TransactionsBillPaymentEnterMeterDetailsPage(TestingContext testingContex
this.GetMeterButton = "GetMeterButton";
}
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Get Meter",
- _ => "GetMeter"
- };
+ protected override String Trait => "GetMeter";
public async Task EnterMeterNumber(String meterNumber)
{
@@ -135,11 +123,7 @@ public TransactionsBillPaymentMakeAPaymentPage(TestingContext testingContext) :
}
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Make Bill Payment",
- _ => "MakeBillPayment"
- };
+ protected override String Trait => "MakeBillPayment";
public async Task EnterCustomerMobileNumber(String customerMobileNumber)
{
@@ -212,11 +196,7 @@ public TransactionsBillPaymentSuccessfulPaymentPage(TestingContext testingContex
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Bill Payment Successful",
- _ => "BillPaymentSuccessful"
- };
+ protected override String Trait => "BillPaymentSuccessful";
public async Task ClickCompleteButton()
{
diff --git a/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupEnterTopupDetailsPage.cs b/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupEnterTopupDetailsPage.cs
index 4c0a9d991..19e332a33 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupEnterTopupDetailsPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupEnterTopupDetailsPage.cs
@@ -21,11 +21,7 @@ public TransactionsMobileTopupEnterTopupDetailsPage(TestingContext testingContex
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Enter Topup Details",
- _ => "EnterTopupDetails"
- };
+ protected override String Trait => "EnterTopupDetails";
public async Task EnterCustomerMobileNumber(String customerMobileNumber) {
IWebElement element = await this.WaitForElementByAccessibilityId(this.CustomerMobileNumberEntry);
diff --git a/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSelectOperatorPage.cs b/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSelectOperatorPage.cs
index d0cbf5079..4a846671b 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSelectOperatorPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSelectOperatorPage.cs
@@ -12,11 +12,7 @@ public TransactionsMobileTopupSelectOperatorPage(TestingContext testingContext)
}
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Select an Operator",
- _ => "SelectanOperator"
- };
+ protected override String Trait => "SelectanOperator";
#endregion
diff --git a/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSelectProductPage.cs b/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSelectProductPage.cs
index d5cc43add..2dbf8e908 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSelectProductPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSelectProductPage.cs
@@ -11,11 +11,7 @@ public TransactionsMobileTopupSelectProductPage(TestingContext testingContext) :
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Select a Product",
- _ => "SelectaProduct"
- };
+ protected override String Trait => "SelectaProduct";
#endregion
diff --git a/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSuccessfulTopupPage.cs b/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSuccessfulTopupPage.cs
index 44b7ee833..5b7583555 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSuccessfulTopupPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/TransactionsMobileTopupSuccessfulTopupPage.cs
@@ -15,11 +15,7 @@ public TransactionsMobileTopupSuccessfulTopupPage(TestingContext testingContext)
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Mobile Topup Successful",
- _ => "MobileTopupSuccessful"
- };
+ protected override String Trait => "MobileTopupSuccessful";
public async Task ClickCompleteButton() {
await Retry.For(async () => {
diff --git a/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherEnterVoucherIssueDetailsPage.cs b/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherEnterVoucherIssueDetailsPage.cs
index 27cf0b4be..62eebaf89 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherEnterVoucherIssueDetailsPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherEnterVoucherIssueDetailsPage.cs
@@ -25,11 +25,7 @@ public TransactionsVoucherEnterVoucherIssueDetailsPage(TestingContext testingCon
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Enter Voucher Issue Details",
- _ => "EnterVoucherIssueDetails"
- };
+ protected override String Trait => "EnterVoucherIssueDetails";
public async Task EnterRecipientMobileNumber(String recipientMobileNumber)
{
diff --git a/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherIssueSuccessfulTopupPage.cs b/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherIssueSuccessfulTopupPage.cs
index 5c6aa1093..db3842533 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherIssueSuccessfulTopupPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherIssueSuccessfulTopupPage.cs
@@ -17,11 +17,7 @@ public TransactionsVoucherIssueSuccessfulTopupPage(TestingContext testingContext
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Voucher Issue Successful",
- _ => "VoucherIssueSuccessful"
- };
+ protected override String Trait => "VoucherIssueSuccessful";
public async Task ClickCompleteButton()
{
diff --git a/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherSelectOperatorPage.cs b/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherSelectOperatorPage.cs
index 8bdffdaa5..7ee98a834 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherSelectOperatorPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherSelectOperatorPage.cs
@@ -12,11 +12,7 @@ public TransactionsVoucherSelectOperatorPage(TestingContext testingContext) : ba
}
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Select an Operator",
- _ => "SelectanOperator"
- };
+ protected override String Trait => "SelectanOperator";
#endregion
public async Task ClickOperatorButton(String operatorName)
diff --git a/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherSelectProductPage.cs b/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherSelectProductPage.cs
index e4ed8e5ea..b5f00bed6 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherSelectProductPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/TransactionsVoucherSelectProductPage.cs
@@ -13,11 +13,7 @@ public TransactionsVoucherSelectProductPage(TestingContext testingContext) : bas
#region Properties
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "Select a Product",
- _ => "SelectaProduct"
- };
+ protected override String Trait => "SelectaProduct";
#endregion
diff --git a/TransactionProcessor.Mobile.UITests/Pages/ViewLogsPage.cs b/TransactionProcessor.Mobile.UITests/Pages/ViewLogsPage.cs
index 867a88e63..615a09552 100644
--- a/TransactionProcessor.Mobile.UITests/Pages/ViewLogsPage.cs
+++ b/TransactionProcessor.Mobile.UITests/Pages/ViewLogsPage.cs
@@ -8,9 +8,5 @@ public ViewLogsPage(TestingContext testingContext) : base(testingContext){
}
- protected override String Trait => AppiumDriverWrapper.MobileTestPlatform switch
- {
- MobileTestPlatform.iOS => "View Logs",
- _ => "ViewLogs"
- };
+ protected override String Trait => "ViewLogs";
}
\ No newline at end of file
diff --git a/TransactionProcessor.Mobile.UITests/Steps/SharedAppSteps.cs b/TransactionProcessor.Mobile.UITests/Steps/SharedAppSteps.cs
index 3458082d1..1ae1fa126 100644
--- a/TransactionProcessor.Mobile.UITests/Steps/SharedAppSteps.cs
+++ b/TransactionProcessor.Mobile.UITests/Steps/SharedAppSteps.cs
@@ -1,4 +1,5 @@
-using OpenQA.Selenium.Appium.Enums;
+using OpenQA.Selenium.Appium.Android;
+using OpenQA.Selenium.Appium.Enums;
using Reqnroll;
using Shouldly;
using TransactionProcessor.Mobile.UITests.Common;
@@ -30,8 +31,9 @@ public async Task WhenIClickOnTheBackButton() {
[Then(@"The application closes")]
public void ThenTheApplicationCloses() {
- if (AppiumDriverWrapper.MobileTestPlatform != MobileTestPlatform.iOS) {
- AppState state = AppiumDriverWrapper.Driver.GetAppState("com.transactionprocessor.mobile");
+ if (AppiumDriverWrapper.MobileTestPlatform == MobileTestPlatform.Android) {
+ var driver = AppiumDriverWrapper.Driver as AndroidDriver;
+ AppState state = driver.GetAppState("com.transactionprocessor.mobile");
state.ShouldBe(AppState.NotRunning);
}
}
diff --git a/TransactionProcessor.Mobile.UITests/Steps/SharedSteps.cs b/TransactionProcessor.Mobile.UITests/Steps/SharedSteps.cs
index 076812500..f11892f1c 100644
--- a/TransactionProcessor.Mobile.UITests/Steps/SharedSteps.cs
+++ b/TransactionProcessor.Mobile.UITests/Steps/SharedSteps.cs
@@ -196,7 +196,8 @@ public async Task GivenIHaveAssignedTheFollowingOperatorToTheMerchants(DataTable
public async Task GivenIHaveCreatedAConfigForMyDevice() {
var deviceSerial = await this.loginPage.GetDeviceSerial();
- var clientDetails = this.TestingContext.GetClientDetails("mobileAppClient");
+ ClientDetails clientDetails = this.TestingContext.GetClientDetails("mobileAppClient");
+ //ClientDetails clientDetails = ClientDetails.Create("clientId-mobileAppClient", "secret-mobile", new List());
var configRequest = new {
clientId = clientDetails.ClientId,
clientSecret = clientDetails.ClientSecret,
@@ -234,8 +235,10 @@ public async Task GivenIHaveCreatedAConfigForMyDevice() {
HttpClient httpClient = new HttpClient(clientHandler);
var response = await httpClient.SendAsync(request, CancellationToken.None);
- response.StatusCode.ShouldBe(HttpStatusCode.OK);
-
+ var req = JsonConvert.SerializeObject(configRequest);
+ var content = await response.Content.ReadAsStringAsync();
+ response.StatusCode.ShouldBe(HttpStatusCode.OK, $"Request [{req}] Response [{content}]");
+
this.TestingContext.Logger.LogInformation($"Config Created for serial {deviceSerial}");
}
@@ -246,7 +249,6 @@ public async Task GivenIHaveCreatedAConfigForMyApplication()
{
applicationId = "transactionMobilePOS",
androidkey = "android",
- ioskey = "ios",
macoskey = "macos",
windowskey = "windows",
};
diff --git a/TransactionProcessor.Mobile.UITests/Steps/TransactionsSteps.cs b/TransactionProcessor.Mobile.UITests/Steps/TransactionsSteps.cs
index 977bc863a..514992d42 100644
--- a/TransactionProcessor.Mobile.UITests/Steps/TransactionsSteps.cs
+++ b/TransactionProcessor.Mobile.UITests/Steps/TransactionsSteps.cs
@@ -130,10 +130,7 @@ public async Task ThenTheTransactionSelectBillPaymentOperatorPageIsDisplayed(){
[When(@"I tap on the '([^']*)' button")]
public async Task WhenITapOnTheButton(String operatorName) {
- if (AppiumDriverWrapper.MobileTestPlatform != MobileTestPlatform.iOS) {
- operatorName = operatorName.Replace(" ", "");
- }
-
+ operatorName = operatorName.Replace(" ", "");
Task t = this.operatorType switch{
OperatorType.MobileTopup => this.transactionsMobileTopupSelectOperatorPage.ClickOperatorButton(operatorName),
OperatorType.Voucher => this.transactionsVoucherSelectOperatorPage.ClickOperatorButton(operatorName),
@@ -150,9 +147,7 @@ public async Task ThenTheSelectProductPageIsDisplayed() {
[When(@"I tap on the '([^']*)' product button")]
public async Task WhenITapOnTheProductButton(String productText){
- if (AppiumDriverWrapper.MobileTestPlatform != MobileTestPlatform.iOS) {
- productText = productText.Replace(" ", "");
- }
+ productText = productText.Replace(" ", "");
Task t = this.operatorType switch{
OperatorType.MobileTopup => this.transactionsMobileTopupSelectProductPage.ClickProductButton(productText),
diff --git a/TransactionProcessor.Mobile.UITests/TransactionProcessor.Mobile.UITests.csproj b/TransactionProcessor.Mobile.UITests/TransactionProcessor.Mobile.UITests.csproj
index e4e7b5472..17cced275 100644
--- a/TransactionProcessor.Mobile.UITests/TransactionProcessor.Mobile.UITests.csproj
+++ b/TransactionProcessor.Mobile.UITests/TransactionProcessor.Mobile.UITests.csproj
@@ -1,7 +1,7 @@

- net9.0
+ net10.0
latest
enable
enable
@@ -13,26 +13,26 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs b/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs
index d81e28658..83e669132 100644
--- a/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs
+++ b/TransactionProcessor.Mobile/Extensions/MauiAppBuilderExtensions.cs
@@ -216,6 +216,9 @@ public static MauiAppBuilder ConfigureUIServices(this MauiAppBuilder builder) {
}
public static MauiAppBuilder ConfigureRequestHandlers(this MauiAppBuilder builder) {
+ builder.Services.AddSingleton();
+ builder.Services.AddSingleton();
+ builder.Services.AddSingleton();
builder.Services.AddSingleton();
builder.Services.AddSingleton>, LoginRequestHandler>();
builder.Services.AddSingleton>, LoginRequestHandler>();
diff --git a/TransactionProcessor.Mobile/Platforms/MacCatalyst/AppDelegate.cs b/TransactionProcessor.Mobile/Platforms/MacCatalyst/AppDelegate.cs
deleted file mode 100644
index 1992a91a3..000000000
--- a/TransactionProcessor.Mobile/Platforms/MacCatalyst/AppDelegate.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Foundation;
-
-namespace TransactionProcessor.Mobile
-{
- [Register("AppDelegate")]
- public class AppDelegate : MauiUIApplicationDelegate
- {
- protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
- }
-}
diff --git a/TransactionProcessor.Mobile/Platforms/MacCatalyst/Entitlements.plist b/TransactionProcessor.Mobile/Platforms/MacCatalyst/Entitlements.plist
deleted file mode 100644
index de4adc94a..000000000
--- a/TransactionProcessor.Mobile/Platforms/MacCatalyst/Entitlements.plist
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
- com.apple.security.app-sandbox
-
-
- com.apple.security.network.client
-
-
-
-
diff --git a/TransactionProcessor.Mobile/Platforms/MacCatalyst/Info.plist b/TransactionProcessor.Mobile/Platforms/MacCatalyst/Info.plist
deleted file mode 100644
index 726897715..000000000
--- a/TransactionProcessor.Mobile/Platforms/MacCatalyst/Info.plist
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- UIDeviceFamily
-
- 2
-
- UIRequiredDeviceCapabilities
-
- arm64
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- XSAppIconAssets
- Assets.xcassets/appicon.appiconset
-
-
diff --git a/TransactionProcessor.Mobile/Platforms/MacCatalyst/Program.cs b/TransactionProcessor.Mobile/Platforms/MacCatalyst/Program.cs
deleted file mode 100644
index 84d612856..000000000
--- a/TransactionProcessor.Mobile/Platforms/MacCatalyst/Program.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using ObjCRuntime;
-using UIKit;
-
-namespace TransactionProcessor.Mobile
-{
- public class Program
- {
- // This is the main entry point of the application.
- static void Main(string[] args)
- {
- // if you want to use a different Application Delegate class from "AppDelegate"
- // you can specify it here.
- UIApplication.Main(args, null, typeof(AppDelegate));
- }
- }
-}
diff --git a/TransactionProcessor.Mobile/Platforms/Tizen/Main.cs b/TransactionProcessor.Mobile/Platforms/Tizen/Main.cs
deleted file mode 100644
index b371e287b..000000000
--- a/TransactionProcessor.Mobile/Platforms/Tizen/Main.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System;
-using Microsoft.Maui;
-using Microsoft.Maui.Hosting;
-
-namespace TransactionProcessor.Mobile
-{
- internal class Program : MauiApplication
- {
- protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
-
- static void Main(string[] args)
- {
- var app = new Program();
- app.Run(args);
- }
- }
-}
diff --git a/TransactionProcessor.Mobile/Platforms/Tizen/tizen-manifest.xml b/TransactionProcessor.Mobile/Platforms/Tizen/tizen-manifest.xml
deleted file mode 100644
index a4ec146d7..000000000
--- a/TransactionProcessor.Mobile/Platforms/Tizen/tizen-manifest.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
- maui-appicon-placeholder
-
-
-
-
- http://tizen.org/privilege/internet
-
-
-
-
\ No newline at end of file
diff --git a/TransactionProcessor.Mobile/Platforms/iOS/AppDelegate.cs b/TransactionProcessor.Mobile/Platforms/iOS/AppDelegate.cs
deleted file mode 100644
index 1992a91a3..000000000
--- a/TransactionProcessor.Mobile/Platforms/iOS/AppDelegate.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using Foundation;
-
-namespace TransactionProcessor.Mobile
-{
- [Register("AppDelegate")]
- public class AppDelegate : MauiUIApplicationDelegate
- {
- protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
- }
-}
diff --git a/TransactionProcessor.Mobile/Platforms/iOS/DeviceInformationService.cs b/TransactionProcessor.Mobile/Platforms/iOS/DeviceInformationService.cs
deleted file mode 100644
index e253c1653..000000000
--- a/TransactionProcessor.Mobile/Platforms/iOS/DeviceInformationService.cs
+++ /dev/null
@@ -1,299 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace TransactionProcessor.Mobile.BusinessLogic.UIServices
-{
- using System.Runtime.InteropServices;
- using Foundation;
- using UIKit;
-
- public static partial class DeviceInformationService
- {
- // based on code from https://github.com/dannycabrera/Get-iOS-Model
-
- private const string HardwareProperty = "hw.machine";
-
- [DllImport(ObjCRuntime.Constants.SystemLibrary)]
- private static extern int sysctlbyname([MarshalAs(UnmanagedType.LPStr)] string property,
- IntPtr output,
- IntPtr oldLen,
- IntPtr newp,
- uint newlen);
-
- public static partial String Model()
- {
- string version = FindVersion();
- if (version == "i386" || version == "x86_64")
- {
- return GetModel(NSProcessInfo.ProcessInfo.Environment["SIMULATOR_MODEL_IDENTIFIER"].ToString()) + " Simulator";
- }
- return GetModel(version);
- }
-
- public static partial String Platform() => $"{DeviceInfo.Platform} {UIDevice.CurrentDevice.SystemVersion}";
-
- private static string FindVersion()
- {
- try
- {
- // get the length of the string that will be returned
- var pLen = Marshal.AllocHGlobal(sizeof(int));
- _ = sysctlbyname(HardwareProperty, IntPtr.Zero, pLen, IntPtr.Zero, 0);
-
- var length = Marshal.ReadInt32(pLen);
-
- // check to see if we got a length
- if (length == 0)
- {
- Marshal.FreeHGlobal(pLen);
- return "Unknown";
- }
-
- // get the hardware string
- var pStr = Marshal.AllocHGlobal(length);
- _ = sysctlbyname(HardwareProperty, pStr, pLen, IntPtr.Zero, 0);
-
- // convert the native string into a C# string
- var hardwareStr = Marshal.PtrToStringAnsi(pStr);
-
- // cleanup
- Marshal.FreeHGlobal(pLen);
- Marshal.FreeHGlobal(pStr);
-
- return hardwareStr;
- }
- catch (Exception ex)
- {
- Console.WriteLine("DeviceHardware.Version Ex: " + ex.Message);
- }
-
- return "Unknown";
- }
-
- private static string GetModel(string version)
- {
- if (version.StartsWith("iPhone"))
- {
- switch (version)
- {
- case "iPhone14,2":
- return "iPhone 13 Pro";
- case "iPhone14,3":
- return "iPhone 13 Pro Max";
- case "iPhone14,4":
- return "iPhone 13 mini";
- case "iPhone14,5":
- return "iPhone 13";
- case "iPhone13,1":
- return "iPhone 12 mini";
- case "iPhone13,2":
- return "iPhone 12";
- case "iPhone13,3":
- return "iPhone 12 Pro";
- case "iPhone13,4":
- return "iPhone 12 Pro Max";
- case "iPhone12,8":
- return "iPhone SE (2nd generation)";
- case "iPhone12,5":
- return "iPhone 11 Pro Max";
- case "iPhone12,3":
- return "iPhone 11 Pro";
- case "iPhone12,1":
- return "iPhone 11";
- case "iPhone11,2":
- return "iPhone XS";
- case "iPhone11,4":
- case "iPhone11,6":
- return "iPhone XS Max";
- case "iPhone11,8":
- return "iPhone XR";
- case "iPhone10,3":
- case "iPhone10,6":
- return "iPhone X";
- case "iPhone10,2":
- case "iPhone10,5":
- return "iPhone 8 Plus";
- case "iPhone10,1":
- case "iPhone10,4":
- return "iPhone 8";
- case "iPhone9,2":
- case "iPhone9,4":
- return "iPhone 7 Plus";
- case "iPhone9,1":
- case "iPhone9,3":
- return "iPhone 7";
- case "iPhone8,4":
- return "iPhone SE";
- case "iPhone8,2":
- return "iPhone 6S Plus";
- case "iPhone8,1":
- return "iPhone 6S";
- case "iPhone7,1":
- return "iPhone 6 Plus";
- case "iPhone7,2":
- return "iPhone 6";
- case "iPhone6,2":
- return "iPhone 5S Global";
- case "iPhone6,1":
- return "iPhone 5S GSM";
- case "iPhone5,4":
- return "iPhone 5C Global";
- case "iPhone5,3":
- return "iPhone 5C GSM";
- case "iPhone5,2":
- return "iPhone 5 Global";
- case "iPhone5,1":
- return "iPhone 5 GSM";
- default:
- return version;
- }
- }
-
- if (version.StartsWith("iPod"))
- {
- switch (version)
- {
- case "iPod9,1":
- return "iPod touch 7G";
- case "iPod7,1":
- return "iPod touch 6G";
- default:
- return version;
- }
- }
-
- if (version.StartsWith("iPad"))
- {
- switch (version)
- {
- case "iPad14,2":
- return "iPad mini (6th generation) Wi-FI + Cellular";
- case "iPad14,1":
- return "iPad mini (6th generation) Wi-FI";
- case "iPad13,11":
- case "iPad13,10":
- return "iPad Pro (12.9-inch) (5th generation) Wi-Fi + Cellular";
- case "iPad13,9":
- case "iPad13,8":
- return "iPad Pro (12.9-inch) (5th generation) Wi-Fi";
- case "iPad13,7":
- case "iPad13,6":
- return "iPad Pro (11-inch) (3rd generation) Wi-Fi + Cellular";
- case "iPad13,5":
- case "iPad13,4":
- return "iPad Pro (11-inch) (3rd generation) Wi-Fi";
- case "iPad13,2":
- return "iPad Air (4th generation) Wi-Fi + Cellular";
- case "iPad13,1":
- return "iPad Air (4th generation) Wi-Fi";
- case "iPad12,2":
- return "iPad (9th Generation) Wi-Fi + Cellular";
- case "iPad12,1":
- return "iPad (9th generation) Wi-Fi";
- case "iPad11,7":
- return "iPad (8th Generation) Wi-Fi + Cellular";
- case "iPad11,6":
- return "iPad (8th Generation) Wi-Fi";
- case "iPad11,4":
- return "iPad Air (3rd generation) Wi-Fi + Cellular";
- case "iPad11,3":
- return "iPad Air (3rd generation) Wi-Fi";
- case "iPad11,2":
- return "iPad mini (5th generation) Wi-Fi + Cellular";
- case "iPad11,1":
- return "iPad mini (5th generation) Wi-Fi";
- case "iPad8,12":
- return "iPad Pro (12.9-inch) (4th generation) Wi-Fi + Cellular";
- case "iPad8,11":
- return "iPad Pro (12.9-inch) (4th generation) Wi-Fi";
- case "iPad8,10":
- return "iPad Pro (11-inch) (2nd generation) Wi-Fi + Cellular";
- case "iPad8,9":
- return "iPad Pro (11-inch) (2nd generation) Wi-Fi";
- case "iPad8,8":
- return "iPad Pro 12.9-inch (3rd Generation)";
- case "iPad8,7":
- return "iPad Pro 12.9-inch (3rd generation) Wi-Fi + Cellular";
- case "iPad8,6":
- case "iPad8,5":
- return "iPad Pro 12.9-inch (3rd Generation)";
- case "iPad8,4":
- return "iPad Pro 11-inch";
- case "iPad8,3":
- return "iPad Pro 11-inch Wi-Fi + Cellular";
- case "iPad8,2":
- return "iPad Pro 11-inch";
- case "iPad8,1":
- return "iPad Pro 11-inch Wi-Fi";
- case "iPad7,12":
- return "iPad (7th generation) Wi-Fi + Cellular";
- case "iPad7,11":
- return "iPad (7th generation) Wi-Fi";
- case "iPad7,6":
- return "iPad (6th generation) Wi-Fi + Cellular";
- case "iPad7,5":
- return "iPad (6th generation) Wi-Fi";
- case "iPad7,4":
- return "iPad Pro (10.5-inch) Wi-Fi + Cellular";
- case "iPad7,3":
- return "iPad Pro (10.5-inch) Wi-Fi";
- case "iPad7,2":
- return "iPad Pro 12.9-inch (2nd generation) Wi-Fi + Cellular";
- case "iPad7,1":
- return "iPad Pro 12.9-inch (2nd generation) Wi-Fi";
- case "iPad6,12":
- return "iPad (5th generation) Wi-Fi + Cellular";
- case "iPad6,11":
- return "iPad (5th generation) Wi-Fi";
- case "iPad6,8":
- return "iPad Pro 12.9-inch Wi-Fi + Cellular";
- case "iPad6,7":
- return "iPad Pro 12.9-inch Wi-Fi";
- case "iPad6,4":
- return "iPad Pro (9.7-inch) Wi-Fi + Cellular";
- case "iPad6,3":
- return "iPad Pro (9.7-inch) Wi-Fi";
- case "iPad5,4":
- return "iPad Air 2 Wi-Fi + Cellular";
- case "iPad5,3":
- return "iPad Air 2 Wi-Fi";
- case "iPad5,2":
- return "iPad mini 4 Wi-Fi + Cellular";
- case "iPad5,1":
- return "iPad mini 4 Wi-Fi";
- case "iPad4,9":
- return "iPad mini 3 Wi-Fi + Cellular (TD-LTE)";
- case "iPad4,8":
- return "iPad mini 3 Wi-Fi + Cellular";
- case "iPad4,7":
- return "iPad mini 3 Wi-Fi";
- case "iPad4,6":
- return "iPad mini 2 Wi-Fi + Cellular (TD-LTE)";
- case "iPad4,5":
- return "iPad mini 2 Wi-Fi + Cellular";
- case "iPad4,4":
- return "iPad mini 2 Wi-Fi";
- case "iPad4,3":
- return "iPad Air Wi-Fi + Cellular (TD-LTE)";
- case "iPad4,2":
- return "iPad Air Wi-Fi + Cellular";
- case "iPad4,1":
- return "iPad Air Wi-Fi";
- case "iPad3,6":
- return "iPad (4th generation) Wi-Fi + Cellular (MM)";
- case "iPad3,5":
- return "iPad (4th generation) Wi-Fi + Cellular";
- case "iPad3,4":
- return "iPad (4th generation) Wi-Fi";
- default:
- return version;
- }
- }
-
- return string.IsNullOrWhiteSpace(version) ? "Unknown" : version;
- }
- }
-}
diff --git a/TransactionProcessor.Mobile/Platforms/iOS/DeviceOrientationService.cs b/TransactionProcessor.Mobile/Platforms/iOS/DeviceOrientationService.cs
deleted file mode 100644
index e42e865ab..000000000
--- a/TransactionProcessor.Mobile/Platforms/iOS/DeviceOrientationService.cs
+++ /dev/null
@@ -1,53 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace TransactionProcessor.Mobile.BusinessLogic.UIServices
-{
- using Foundation;
- using Microsoft.Maui.Devices;
- using UIKit;
-
- public static partial class DeviceOrientationService
- {
- private static readonly IReadOnlyDictionary UIInterfaceOrientationMapping =
- new Dictionary
- {
- [DisplayOrientation.Landscape] = UIInterfaceOrientation.LandscapeLeft,
- [DisplayOrientation.Portrait] = UIInterfaceOrientation.Portrait,
- };
-
- private static readonly IReadOnlyDictionary UIInterfaceOrientationMaskMapping =
- new Dictionary
- {
- [DisplayOrientation.Landscape] = UIInterfaceOrientationMask.Landscape,
- [DisplayOrientation.Portrait] = UIInterfaceOrientationMask.Portrait,
- };
-
- public static partial void SetDeviceOrientation(DisplayOrientation displayOrientation){
-
- if (UIDevice.CurrentDevice.CheckSystemVersion(16, 0)){
-
- var scene = (UIApplication.SharedApplication.ConnectedScenes.ToArray()[0] as UIWindowScene);
- if (scene != null)
- {
- var test = UIApplication.SharedApplication.KeyWindow?.RootViewController;
- if (test != null)
- {
- test.SetNeedsUpdateOfSupportedInterfaceOrientations();
- UIInterfaceOrientationMask mappingValue = DeviceOrientationService.UIInterfaceOrientationMaskMapping.Single(m => m.Key == displayOrientation).Value;
- scene.RequestGeometryUpdate(
- new UIWindowSceneGeometryPreferencesIOS(mappingValue),
- error => { });
- }
- }
- }
- else{
- UIInterfaceOrientation mappingValue = DeviceOrientationService.UIInterfaceOrientationMapping.Single(m => m.Key == displayOrientation).Value;
- UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)mappingValue), new NSString("orientation"));
- }
- }
- }
-}
diff --git a/TransactionProcessor.Mobile/Platforms/iOS/Info.plist b/TransactionProcessor.Mobile/Platforms/iOS/Info.plist
deleted file mode 100644
index 0004a4fde..000000000
--- a/TransactionProcessor.Mobile/Platforms/iOS/Info.plist
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
- LSRequiresIPhoneOS
-
- UIDeviceFamily
-
- 1
- 2
-
- UIRequiredDeviceCapabilities
-
- arm64
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- XSAppIconAssets
- Assets.xcassets/appicon.appiconset
-
-
diff --git a/TransactionProcessor.Mobile/Platforms/iOS/Program.cs b/TransactionProcessor.Mobile/Platforms/iOS/Program.cs
deleted file mode 100644
index 84d612856..000000000
--- a/TransactionProcessor.Mobile/Platforms/iOS/Program.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-using ObjCRuntime;
-using UIKit;
-
-namespace TransactionProcessor.Mobile
-{
- public class Program
- {
- // This is the main entry point of the application.
- static void Main(string[] args)
- {
- // if you want to use a different Application Delegate class from "AppDelegate"
- // you can specify it here.
- UIApplication.Main(args, null, typeof(AppDelegate));
- }
- }
-}
diff --git a/TransactionProcessor.Mobile/Platforms/iOS/Resources/PrivacyInfo.xcprivacy b/TransactionProcessor.Mobile/Platforms/iOS/Resources/PrivacyInfo.xcprivacy
deleted file mode 100644
index 24ab3b433..000000000
--- a/TransactionProcessor.Mobile/Platforms/iOS/Resources/PrivacyInfo.xcprivacy
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
- NSPrivacyAccessedAPITypes
-
-
- NSPrivacyAccessedAPIType
- NSPrivacyAccessedAPICategoryFileTimestamp
- NSPrivacyAccessedAPITypeReasons
-
- C617.1
-
-
-
- NSPrivacyAccessedAPIType
- NSPrivacyAccessedAPICategorySystemBootTime
- NSPrivacyAccessedAPITypeReasons
-
- 35F9.1
-
-
-
- NSPrivacyAccessedAPIType
- NSPrivacyAccessedAPICategoryDiskSpace
- NSPrivacyAccessedAPITypeReasons
-
- E174.1
-
-
-
-
-
-
diff --git a/TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj b/TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj
index 6aba58b31..bbe3218a6 100644
--- a/TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj
+++ b/TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj
@@ -1,35 +1,13 @@

-
-
-
-
-
-
- net9.0-android
+ net10.0-android
- net9.0-android;net9.0-windows10.0.19041.0
-
-
-
-
- net9.0-android;net9.0-ios;net9.0-maccatalyst
+ net10.0-android;net10.0-windows10.0.19041.0
-
-
-
+
Exe
TransactionProcessor.Mobile
@@ -51,12 +29,9 @@
MSIX
- 15.0
- 15.0
21.0
10.0.17763.0
10.0.17763.0
- 6.5
@@ -171,28 +146,40 @@
-
+
-
-
-
+
+
+
-
+
-
-
+
+
-
+
ANDROID
-
+
apk
+
+
+ true
+
+
+ true
+ true
+
+
+ true
+
+
diff --git a/TransactionProcessor.Mobile/UIServices/DeviceService.cs b/TransactionProcessor.Mobile/UIServices/DeviceService.cs
index ab2512e36..092752fcc 100644
--- a/TransactionProcessor.Mobile/UIServices/DeviceService.cs
+++ b/TransactionProcessor.Mobile/UIServices/DeviceService.cs
@@ -33,8 +33,6 @@ public String GetPlatform()
{
return DeviceInformationService.Platform();
}
-
- public Boolean IsIOS() => DeviceInfo.Platform == DevicePlatform.iOS;
public String GetManufacturer(){
return DeviceInfo.Manufacturer;