name: Test Files Hash Action on: push: branches: [main, develop] pull_request: branches: [main] workflow_dispatch: jobs: test: runs-on: ubuntu-latest name: Test Action steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Run Unit Tests run: node run-tests.js - name: Test Action - Single File id: test-single uses: ./ with: files: 'examples/sample1.txt' algorithm: 'sha256' - name: Verify Single File Output run: | echo "Hash: ${{ steps.test-single.outputs.hash }}" echo "File Count: ${{ steps.test-single.outputs.file-count }}" if [ "${{ steps.test-single.outputs.file-count }}" != "1" ]; then echo "❌ Expected file count 1, got ${{ steps.test-single.outputs.file-count }}" exit 1 fi if [ -z "${{ steps.test-single.outputs.hash }}" ]; then echo "❌ Hash output is empty" exit 1 fi echo "✅ Single file test passed" - name: Test Action - Multiple Files id: test-multiple uses: ./ with: files: 'examples/*.txt' algorithm: 'md5' - name: Verify Multiple Files Output run: | echo "Hash: ${{ steps.test-multiple.outputs.hash }}" echo "File Count: ${{ steps.test-multiple.outputs.file-count }}" if [ "${{ steps.test-multiple.outputs.file-count }}" != "1" ]; then echo "❌ Expected file count 1, got ${{ steps.test-multiple.outputs.file-count }}" exit 1 fi echo "✅ Multiple files test passed" - name: Test Action - All Examples id: test-all uses: ./ with: files: 'examples/*' algorithm: 'sha1' - name: Verify All Files Output run: | echo "Hash: ${{ steps.test-all.outputs.hash }}" echo "File Count: ${{ steps.test-all.outputs.file-count }}" if [ "${{ steps.test-all.outputs.file-count }}" != "3" ]; then echo "❌ Expected file count 3, got ${{ steps.test-all.outputs.file-count }}" exit 1 fi echo "✅ All files test passed" - name: Test Action - Different Algorithm id: test-sha512 uses: ./ with: files: 'README.md' algorithm: 'sha512' - name: Verify SHA512 Output run: | echo "Hash: ${{ steps.test-sha512.outputs.hash }}" echo "File Count: ${{ steps.test-sha512.outputs.file-count }}" if [ "${{ steps.test-sha512.outputs.file-count }}" != "1" ]; then echo "❌ Expected file count 1, got ${{ steps.test-sha512.outputs.file-count }}" exit 1 fi # SHA512 hash should be 128 characters long hash_length=$(echo "${{ steps.test-sha512.outputs.hash }}" | wc -c) if [ $hash_length -ne 129 ]; then # 128 + 1 for newline echo "❌ SHA512 hash length should be 128, got $((hash_length-1))" exit 1 fi echo "✅ SHA512 test passed" - name: Test Action - Missing Files (should fail) id: test-missing continue-on-error: true uses: ./ with: files: 'non-existent-file.txt' algorithm: 'sha256' - name: Verify Missing Files Handling run: | if [ "${{ steps.test-missing.outcome }}" == "success" ]; then echo "❌ Expected action to fail on missing file" exit 1 fi echo "✅ Missing files test passed" test-matrix: runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] node-version: ['18', '20'] name: Test on ${{ matrix.os }} with Node ${{ matrix.node-version }} steps: - name: Checkout uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'pnpm' - name: Test Action uses: ./ with: files: 'examples/sample1.txt' algorithm: 'sha256'