From edfca1f0078550faf51ceb237d6e574de03dc63c Mon Sep 17 00:00:00 2001
From: robin <binkrassdufass@gmail.com>
Date: Sun, 24 Dec 2023 10:11:59 +0000
Subject: [PATCH] tst!  and also made a mongodump on current local database for
 tests to have data

---
 .gitea/actions/init-db/action.yaml            |  76 ++++++++++++
 .gitea/actions/init-db/action.yml             |  19 ---
 .gitea/actions/init-db/index.js               | 116 ------------------
 .../mongo-dump/tibi_allkids_erfurt/ssr.bson   | Bin 67677 -> 33557 bytes
 .../actions/init-db/setConfigInTibiProject.sh | 108 ++++++++++++++++
 5 files changed, 184 insertions(+), 135 deletions(-)
 create mode 100644 .gitea/actions/init-db/action.yaml
 delete mode 100644 .gitea/actions/init-db/action.yml
 delete mode 100644 .gitea/actions/init-db/index.js
 create mode 100644 .gitea/actions/init-db/setConfigInTibiProject.sh

diff --git a/.gitea/actions/init-db/action.yaml b/.gitea/actions/init-db/action.yaml
new file mode 100644
index 0000000..95526f8
--- /dev/null
+++ b/.gitea/actions/init-db/action.yaml
@@ -0,0 +1,76 @@
+name: initialize database
+description: initialize database by using database of test environment
+author: BinKrassDuFass
+
+inputs:
+  MONGODB_SERVICE_NAME:
+    description: 'Name of the MongoDB service'
+    required: true
+    default: 'mongo'
+
+  TIBI_USERNAME:
+    description: 'Username of the Tibi account'
+    required: true
+    default: 'admin'
+
+  TIBI_PASSWORD:
+    description: 'Password of the Tibi account'
+    required: true
+    default: 'admin'
+
+  TIBI_API_URL:
+    description: 'URL of the Tibi API'
+    required: true
+    default: 'http://tibi-server:8080/api/v1'
+  
+  TIBI_API_CONFIG_PATH:
+    description: 'Path of the Tibi API config'
+    required: true
+    default: "${{github.workspace}}/api/config.yml}}"
+  
+  TIBI_API_NAMESPACE:
+    description: 'Namespace of the Tibi API'
+    required: true
+  
+  PROJECT_NAME:
+    description: 'Name of the project'
+    required: true
+
+runs:
+    using: composite
+    steps:
+      - name: Setup mongo tools
+        shell: bash
+        run: |
+              echo "::group::setup Mongo keys"
+              wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
+              sudo apt-get install -y gnupg
+              wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
+              echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
+              echo "::endgroup::"
+
+              echo "::group::mongodb tools"
+              sudo apt-get update
+              echo "aptitude install mongodb-database-tools"
+              sudo apt-get install -y mongodb-database-tools
+              echo "::endgroup::"
+
+              echo "mongodump --version"
+              mongodump --version
+
+      - name: Restore MongoDB Data
+        run: |
+          echo "::group::initialize mongo data"
+          mongorestore --uri "mongodb://${{inputs.MONGODB_SERVICE_NAME}}:27017" ./.github/actions/init-db/mongo-dump
+          echo "::endgroup::"
+        shell: bash
+
+      - name: set config in tibi
+        shell: bash
+        run: ./.github/actions/init-db/setConfigInTibiProject.sh  ${{inputs.TIBI_USERNAME}} ${{inputs.TIBI_PASSWORD}} ${{inputs.TIBI_API_URL}} ${{inputs.TIBI_API_CONFIG_PATH}} ${{inputs.TIBI_API_NAMESPACE}} ${{inputs.PROJECT_NAME}}
+              
+
+
+
+
+      
diff --git a/.gitea/actions/init-db/action.yml b/.gitea/actions/init-db/action.yml
deleted file mode 100644
index 6755d6b..0000000
--- a/.gitea/actions/init-db/action.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-name: initialize database
-description: initialize database by using database of test environment
-author: BinKrassDuFass
-
-inputs:
-  MONGODB_SERVICE_NAME:
-    description: 'Name of the MongoDB service'
-    required: true
-    default: 'mongo'
-
-runs:
-    using: composite
-    steps:
-    - name: Install MongoDB tools
-      run: sudo apt-get install -y mongodb-database-tools
-
-    - name: Restore MongoDB Data
-      run: mongorestore --uri "mongodb://${{inputs.MONGODB_SERVICE_NAME}}:27017" /.gitea/
-
diff --git a/.gitea/actions/init-db/index.js b/.gitea/actions/init-db/index.js
deleted file mode 100644
index e18dcbb..0000000
--- a/.gitea/actions/init-db/index.js
+++ /dev/null
@@ -1,116 +0,0 @@
-const axios = require("axios")
-const { MongoClient } = require("mongodb")
-const fs = require("fs")
-const util = require("util")
-
-// Function to log objects in a detailed manner
-function logObj(o) {
-    console.log(util.inspect(o, false, null, true))
-}
-
-// Function to preload the database with collections
-async function preloadDatabase(db, collections) {
-    for (const { name, file } of collections) {
-        const content = fs.readFileSync(file, "utf8")
-        const data = JSON.parse(content)
-
-        const collection = db.collection(name)
-        await collection.insertMany(data)
-
-        const insertedData = await collection.find({}).toArray()
-        if (insertedData.length !== data.length) {
-            console.error(
-                `Mismatch in collection ${name}: expected ${data.length} documents, found ${insertedData.length}`
-            )
-        } else {
-            console.log(`Successfully verified ${insertedData.length} documents in ${name}`)
-        }
-    }
-}
-
-async function initializeDatabase(config) {
-    try {
-        const dbClient = new MongoClient(config.mongodbUri)
-        await dbClient.connect()
-        let db = dbClient.db(config.tibiDbPrefix)
-        await db.collection("project").deleteMany({ namespace: config.projectApiNamespace })
-
-        const dbName = config.tibiDbPrefix + "_" + config.projectApiNamespace
-        db = dbClient.db(dbName)
-        await db.dropDatabase()
-
-        // Login to Tibi API
-        const loginResponse = await axios.post(config.tibiApiUrl + "/login", {
-            username: config.tibiUsername,
-            password: config.tibiPassword,
-        })
-        const tibiToken = loginResponse.data.token
-
-        // Create project
-        let project
-        try {
-            const projectResponse = await axios.post(
-                config.tibiApiUrl + "/project",
-                {
-                    configFile: config.projectApiConfig,
-                    name: config.projectApiNamespace,
-                    namespace: config.projectApiNamespace,
-                    description: config.projectApiNamespace,
-                },
-                {
-                    headers: {
-                        "X-Auth-Token": tibiToken,
-                    },
-                }
-            )
-            project = projectResponse.data
-        } catch (e) {
-            logObj(e)
-            throw e
-        }
-
-        // Check if project is online
-        const projectStatus = await axios.get(config.tibiApiUrl + "/project/" + project.id, {
-            headers: {
-                "X-Auth-Token": tibiToken,
-            },
-        })
-        if (!projectStatus.data.api.isOnline) {
-            throw new Error(`Project ${config.projectApiNamespace} is not online.`)
-        }
-
-
-        // Define collections to preload into the database
-        const collections = [
-            // Define your collections here as per your Cypress plugin logic
-            // { name: "collectionName", file: "path/to/file.json" },
-            // ... other collections
-        ]
-        await preloadDatabase(db, collections)
-
-        await dbClient.close()
-    } catch (error) {
-        console.error("Error initializing the database:", error)
-        throw error
-    }
-}
-
-// Run the script if it's executed directly
-if (require.main === module) {
-    const config = {
-        projectApiNamespace: process.env.PROJECT_API_NAMESPACE,
-        mongodbUri: process.env.MONGODB_URI,
-        tibiDbPrefix: process.env.TIBI_DB_PREFIX,
-        tibiApiUrl: process.env.TIBI_API_URL,
-        // Add other required environment variables here
-    }
-
-    initializeDatabase(config)
-        .then(() => console.log("Database initialized successfully"))
-        .catch((err) => {
-            console.error("Failed to initialize database:", err)
-            process.exit(1)
-        })
-}
-
-module.exports = initializeDatabase
diff --git a/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/ssr.bson b/.gitea/actions/init-db/mongo-dump/tibi_allkids_erfurt/ssr.bson
index f1cadf763547db739dbfa86a2052151fbde61b80..a026cfd17bc821a3d26e8be31d8e91ed0f5c3d64 100644
GIT binary patch
delta 9
QcmcaRfn{nN(+1II02NCE*8l(j

delta 4003
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

diff --git a/.gitea/actions/init-db/setConfigInTibiProject.sh b/.gitea/actions/init-db/setConfigInTibiProject.sh
new file mode 100644
index 0000000..7c570af
--- /dev/null
+++ b/.gitea/actions/init-db/setConfigInTibiProject.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+
+# Start a GitHub Actions group for input validation
+echo "::group::Validating Inputs"
+
+# Check if the correct number of arguments is passed
+if [ "$#" -ne 6 ]; then
+    echo "Incorrect number of arguments provided."
+    echo "Usage: $0 <TIBI_USERNAME> <TIBI_PASSWORD> <TIBI_API_URL> <PROJECT_API_CONFIG> <PROJECT_NAMESPACE> <PROJECT_NAME>"
+    exit 1
+fi
+
+# Assigning passed arguments to variables for better readability
+TIBI_USERNAME=$1
+TIBI_PASSWORD=$2
+TIBI_API_URL=$3
+PROJECT_API_CONFIG=$4
+PROJECT_NAMESPACE=$5
+PROJECT_NAME=$6
+
+echo "Provided TIBI_USERNAME: $TIBI_USERNAME"
+echo "TIBI_API_URL: $TIBI_API_URL"
+# Be cautious with logging sensitive data like passwords and tokens
+# Echoing the password or sensitive information is generally not recommended
+
+# End the input validation group
+echo "::endgroup::"
+
+# Start a group for authentication
+echo "::group::Authenticating User"
+
+# Prepare authentication request payload
+auth_payload=$(jq -n --arg username "$TIBI_USERNAME" --arg password "$TIBI_PASSWORD" '{username: $username, password: $password}')
+echo "Authentication payload: $auth_payload"
+# Fetch the authentication token
+echo "Requesting authentication token..."
+auth_response=$(curl -s -X POST -H "Content-Type: application/json" -d "$auth_payload" "$TIBI_API_URL/login")
+# Logging the response for debugging (remove sensitive data as necessary)
+echo "Authentication response: $auth_response"
+
+# Extract token from the response
+TIBI_AUTH_TOKEN=$(echo $auth_response | jq -r '.token')
+
+# Check if the token was successfully retrieved
+if [ -z "$TIBI_AUTH_TOKEN" ]; then
+    echo "Failed to get authentication token. Exiting script."
+    exit 1
+fi
+
+echo "Authentication token received successfully."
+echo "::endgroup::"
+
+# Start a group for fetching project data
+echo "::group::Fetching Project Data"
+
+# Get the list of projects from the API
+echo "Retrieving projects..."
+response=$(curl -s -H "X-Auth-Token: $TIBI_AUTH_TOKEN" "$TIBI_API_URL/project")
+echo $response
+projects=$(echo $response) # Parse the JSON response to get project data
+
+echo "::endgroup::"
+
+# Start a group for processing project data
+echo "::group::Processing Project Data"
+
+# Initialize variables to track project existence
+projectFound=false
+projectId=""
+
+# Loop through each project to find if the required project exists
+for row in $(echo "${projects}" | jq -r '.[] | @base64'); do
+    _jq() {
+        echo ${row} | base64 --decode | jq -r ${1}
+    }
+
+    api_name=$(_jq '.name')
+    # Check if the current project's namespace matches the target
+    if [ "$api_name" == "$PROJECT_NAME" ]; then
+        projectId=$(_jq '.id')
+        projectData=$(echo ${row} | base64 --decode)
+        projectFound=true
+        break
+    fi
+done
+
+echo "::endgroup::"
+
+# Start a group for creating or updating the project
+echo "::group::Creating or Updating Project"
+
+# Conditionally create a new project or update the existing one
+if [ "$projectFound" = true ]; then
+    echo "Project found with ID: $projectId, updating..."
+    # Prepare updated project data
+    updatedProjectData=$(echo $projectData | jq --arg configFile "$PROJECT_API_CONFIG" '.configFile = $configFile | del(.id)')
+    # Send a PUT request to update the project
+    updateResponse=$(curl -s -X PUT -H "Content-Type: application/json" -H "X-Auth-Token: $TIBI_AUTH_TOKEN" -d "$updatedProjectData" "$TIBI_API_URL/project/$projectId")
+    # Logging the response for debugging (remove sensitive data as necessary)
+    echo "Update response: $updateResponse"
+
+else
+    echo "Project not found. Creating new project..."
+    # Send a POST request to create a new project
+    createResponse=$(curl -s -X POST -H "Content-Type: application/json" -H "X-Auth-Token: $TIBI_AUTH_TOKEN" -d "{\"configFile\":\"$PROJECT_API_CONFIG\", \"name\":\"$PROJECT_NAMESPACE\", \"namespace\":\"$PROJECT_NAMESPACE\", \"description\":\"$PROJECT_NAMESPACE\"}" "$TIBI_API_URL/project")
+fi
+
+echo "::endgroup::"