From 360aefd1c123dd81410df28df0b66332a4c07a0a Mon Sep 17 00:00:00 2001
From: Daniel <daniel.fernandez@feverup.com>
Date: Tue, 2 May 2023 19:41:51 +0200
Subject: [PATCH] feat: added test for sparse-checkout

---
 .github/workflows/test.yml               | 22 ++++++++++++-
 __test__/verify-sparse-checkout-basic.sh | 23 ++++++++++++++
 __test__/verify-sparse-checkout.sh       | 40 ++++++++++++++++++++++++
 3 files changed, 84 insertions(+), 1 deletion(-)
 create mode 100755 __test__/verify-sparse-checkout-basic.sh
 create mode 100755 __test__/verify-sparse-checkout.sh

diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index c28e771..632f1cb 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -113,6 +113,26 @@ jobs:
       - name: Verify submodules recursive
         run: __test__/verify-submodules-recursive.sh
 
+      # Sparse checkout basic example
+      - name: Sparse checkout basic example
+        uses: ./
+        with:
+          sparse-checkout: .
+      - name: Verify sparse checkout basic
+        run: __test__/verify-sparse-checkout-basic.sh
+
+     # Sparse checkout example
+      - name: Sparse checkout example
+        uses: ./
+        with:
+          sparse-checkout: |
+            .github
+            src
+      - name: Verify sparse checkout basic
+        run: __test__/verify-sparse-checkout-basic.sh
+      - name: Verify sparse checkout example
+        run: __test__/verify-sparse-checkout.sh
+
       # Basic checkout using REST API
       - name: Remove basic
         if: runner.os != 'windows'
@@ -205,7 +225,7 @@ jobs:
           path: basic
       - name: Verify basic
         run: __test__/verify-basic.sh --archive
-    
+
   test-git-container:
     runs-on: ubuntu-latest
     container: bitnami/git:latest
diff --git a/__test__/verify-sparse-checkout-basic.sh b/__test__/verify-sparse-checkout-basic.sh
new file mode 100755
index 0000000..163db29
--- /dev/null
+++ b/__test__/verify-sparse-checkout-basic.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+SPARSE=$(git sparse-checkout list)
+
+if [ "$?" != "0" ]; then
+    echo "Failed to validate sparse-checkout"
+    exit 1
+fi
+
+# Check that sparse-checkout list is not empty
+if [ -z "$SPARSE" ]; then
+  echo "Expected sparse-checkout list to not be empty"
+  exit 1
+fi
+
+# Check that all folders from sparse-checkout exists
+for pattern in $(git sparse-checkout list)
+do
+  if [ ! -d "$pattern" ]; then
+    echo "Expected directory '$pattern' to exist"
+    exit 1
+  fi
+done
\ No newline at end of file
diff --git a/__test__/verify-sparse-checkout.sh b/__test__/verify-sparse-checkout.sh
new file mode 100755
index 0000000..69d1676
--- /dev/null
+++ b/__test__/verify-sparse-checkout.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# Check that only sparse-checkout folders has been fetched
+for pattern in $(git ls-tree --name-only HEAD)
+do
+  if [ -d "$pattern" ]; then
+    if [[ "$pattern" != ".github" && "$pattern" != "src" ]]; then
+      echo "Expected directory '$pattern' to not exist"
+      exit 1
+    fi
+  fi
+done
+
+# Check that .github and its childrens has been fetched correctly
+if [ ! -d "./.github" ]; then
+  echo "Expected directory '.github' to exist"
+  exit 1
+fi
+
+for file in $(git ls-tree -r --name-only HEAD .github)
+do
+  if [ ! -f "$file" ]; then
+    echo "Expected file '$file' to exist"
+    exit 1
+  fi
+done
+
+# Check that src and its childrens has been fetched correctly
+if [ ! -d "./src" ]; then
+  echo "Expected directory 'src' to exist"
+  exit 1
+fi
+
+for file in $(git ls-tree -r --name-only HEAD src)
+do
+  if [ ! -f "$file" ]; then
+    echo "Expected file '$file' to exist"
+    exit 1
+  fi
+done
\ No newline at end of file