pushwork 2.0.0-a.sub.1 → 2.0.0-preview

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/dist/branches.d.ts +19 -0
  2. package/dist/branches.d.ts.map +1 -0
  3. package/dist/branches.js +111 -0
  4. package/dist/branches.js.map +1 -0
  5. package/dist/cli.d.ts +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +238 -272
  8. package/dist/cli.js.map +1 -1
  9. package/dist/config.d.ts +17 -0
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +84 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/fs-tree.d.ts +6 -0
  14. package/dist/fs-tree.d.ts.map +1 -0
  15. package/dist/fs-tree.js +99 -0
  16. package/dist/fs-tree.js.map +1 -0
  17. package/dist/ignore.d.ts +6 -0
  18. package/dist/ignore.d.ts.map +1 -0
  19. package/dist/ignore.js +74 -0
  20. package/dist/ignore.js.map +1 -0
  21. package/dist/index.d.ts +8 -4
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +34 -4
  24. package/dist/index.js.map +1 -1
  25. package/dist/log.d.ts +3 -0
  26. package/dist/log.d.ts.map +1 -0
  27. package/dist/log.js +14 -0
  28. package/dist/log.js.map +1 -0
  29. package/dist/pushwork.d.ts +115 -0
  30. package/dist/pushwork.d.ts.map +1 -0
  31. package/dist/pushwork.js +918 -0
  32. package/dist/pushwork.js.map +1 -0
  33. package/dist/repo.d.ts +14 -0
  34. package/dist/repo.d.ts.map +1 -0
  35. package/dist/repo.js +60 -0
  36. package/dist/repo.js.map +1 -0
  37. package/dist/shapes/custom.d.ts +3 -0
  38. package/dist/shapes/custom.d.ts.map +1 -0
  39. package/dist/shapes/custom.js +57 -0
  40. package/dist/shapes/custom.js.map +1 -0
  41. package/dist/shapes/file.d.ts +20 -0
  42. package/dist/shapes/file.d.ts.map +1 -0
  43. package/dist/shapes/file.js +140 -0
  44. package/dist/shapes/file.js.map +1 -0
  45. package/dist/shapes/index.d.ts +10 -0
  46. package/dist/shapes/index.d.ts.map +1 -0
  47. package/dist/shapes/index.js +35 -0
  48. package/dist/shapes/index.js.map +1 -0
  49. package/dist/shapes/patchwork-folder.d.ts +3 -0
  50. package/dist/shapes/patchwork-folder.d.ts.map +1 -0
  51. package/dist/shapes/patchwork-folder.js +160 -0
  52. package/dist/shapes/patchwork-folder.js.map +1 -0
  53. package/dist/shapes/types.d.ts +37 -0
  54. package/dist/shapes/types.d.ts.map +1 -0
  55. package/dist/shapes/types.js +52 -0
  56. package/dist/shapes/types.js.map +1 -0
  57. package/dist/shapes/vfs.d.ts +3 -0
  58. package/dist/shapes/vfs.d.ts.map +1 -0
  59. package/dist/shapes/vfs.js +88 -0
  60. package/dist/shapes/vfs.js.map +1 -0
  61. package/dist/stash.d.ts +23 -0
  62. package/dist/stash.d.ts.map +1 -0
  63. package/dist/stash.js +118 -0
  64. package/dist/stash.js.map +1 -0
  65. package/flake.lock +128 -0
  66. package/flake.nix +66 -0
  67. package/package.json +15 -48
  68. package/patches/@automerge__automerge-repo@2.6.0-subduction.15.patch +26 -0
  69. package/pnpm-workspace.yaml +5 -0
  70. package/src/branches.ts +93 -0
  71. package/src/cli.ts +258 -408
  72. package/src/config.ts +64 -0
  73. package/src/fs-tree.ts +70 -0
  74. package/src/ignore.ts +33 -0
  75. package/src/index.ts +38 -4
  76. package/src/log.ts +8 -0
  77. package/src/pushwork.ts +1055 -0
  78. package/src/repo.ts +76 -0
  79. package/src/shapes/custom.ts +29 -0
  80. package/src/shapes/file.ts +115 -0
  81. package/src/shapes/index.ts +19 -0
  82. package/src/shapes/patchwork-folder.ts +156 -0
  83. package/src/shapes/types.ts +79 -0
  84. package/src/shapes/vfs.ts +93 -0
  85. package/src/stash.ts +106 -0
  86. package/test/integration/branches.test.ts +389 -0
  87. package/test/integration/pushwork.test.ts +547 -0
  88. package/test/setup.ts +29 -0
  89. package/test/unit/doc-shape.test.ts +612 -0
  90. package/tsconfig.json +2 -3
  91. package/vitest.config.ts +14 -0
  92. package/ARCHITECTURE-ACCORDING-TO-CLAUDE.md +0 -248
  93. package/CLAUDE.md +0 -141
  94. package/README.md +0 -221
  95. package/babel.config.js +0 -5
  96. package/dist/cli/commands.d.ts +0 -71
  97. package/dist/cli/commands.d.ts.map +0 -1
  98. package/dist/cli/commands.js +0 -794
  99. package/dist/cli/commands.js.map +0 -1
  100. package/dist/cli/index.d.ts +0 -2
  101. package/dist/cli/index.d.ts.map +0 -1
  102. package/dist/cli/index.js +0 -19
  103. package/dist/cli/index.js.map +0 -1
  104. package/dist/commands.d.ts +0 -61
  105. package/dist/commands.d.ts.map +0 -1
  106. package/dist/commands.js +0 -861
  107. package/dist/commands.js.map +0 -1
  108. package/dist/config/index.d.ts +0 -71
  109. package/dist/config/index.d.ts.map +0 -1
  110. package/dist/config/index.js +0 -314
  111. package/dist/config/index.js.map +0 -1
  112. package/dist/core/change-detection.d.ts +0 -80
  113. package/dist/core/change-detection.d.ts.map +0 -1
  114. package/dist/core/change-detection.js +0 -523
  115. package/dist/core/change-detection.js.map +0 -1
  116. package/dist/core/config.d.ts +0 -81
  117. package/dist/core/config.d.ts.map +0 -1
  118. package/dist/core/config.js +0 -258
  119. package/dist/core/config.js.map +0 -1
  120. package/dist/core/index.d.ts +0 -6
  121. package/dist/core/index.d.ts.map +0 -1
  122. package/dist/core/index.js +0 -6
  123. package/dist/core/index.js.map +0 -1
  124. package/dist/core/move-detection.d.ts +0 -34
  125. package/dist/core/move-detection.d.ts.map +0 -1
  126. package/dist/core/move-detection.js +0 -121
  127. package/dist/core/move-detection.js.map +0 -1
  128. package/dist/core/snapshot.d.ts +0 -105
  129. package/dist/core/snapshot.d.ts.map +0 -1
  130. package/dist/core/snapshot.js +0 -217
  131. package/dist/core/snapshot.js.map +0 -1
  132. package/dist/core/sync-engine.d.ts +0 -157
  133. package/dist/core/sync-engine.d.ts.map +0 -1
  134. package/dist/core/sync-engine.js +0 -1379
  135. package/dist/core/sync-engine.js.map +0 -1
  136. package/dist/types/config.d.ts +0 -99
  137. package/dist/types/config.d.ts.map +0 -1
  138. package/dist/types/config.js +0 -5
  139. package/dist/types/config.js.map +0 -1
  140. package/dist/types/documents.d.ts +0 -88
  141. package/dist/types/documents.d.ts.map +0 -1
  142. package/dist/types/documents.js +0 -20
  143. package/dist/types/documents.js.map +0 -1
  144. package/dist/types/index.d.ts +0 -4
  145. package/dist/types/index.d.ts.map +0 -1
  146. package/dist/types/index.js +0 -4
  147. package/dist/types/index.js.map +0 -1
  148. package/dist/types/snapshot.d.ts +0 -64
  149. package/dist/types/snapshot.d.ts.map +0 -1
  150. package/dist/types/snapshot.js +0 -2
  151. package/dist/types/snapshot.js.map +0 -1
  152. package/dist/utils/content-similarity.d.ts +0 -53
  153. package/dist/utils/content-similarity.d.ts.map +0 -1
  154. package/dist/utils/content-similarity.js +0 -155
  155. package/dist/utils/content-similarity.js.map +0 -1
  156. package/dist/utils/content.d.ts +0 -10
  157. package/dist/utils/content.d.ts.map +0 -1
  158. package/dist/utils/content.js +0 -31
  159. package/dist/utils/content.js.map +0 -1
  160. package/dist/utils/directory.d.ts +0 -24
  161. package/dist/utils/directory.d.ts.map +0 -1
  162. package/dist/utils/directory.js +0 -52
  163. package/dist/utils/directory.js.map +0 -1
  164. package/dist/utils/fs.d.ts +0 -74
  165. package/dist/utils/fs.d.ts.map +0 -1
  166. package/dist/utils/fs.js +0 -248
  167. package/dist/utils/fs.js.map +0 -1
  168. package/dist/utils/index.d.ts +0 -5
  169. package/dist/utils/index.d.ts.map +0 -1
  170. package/dist/utils/index.js +0 -5
  171. package/dist/utils/index.js.map +0 -1
  172. package/dist/utils/mime-types.d.ts +0 -13
  173. package/dist/utils/mime-types.d.ts.map +0 -1
  174. package/dist/utils/mime-types.js +0 -209
  175. package/dist/utils/mime-types.js.map +0 -1
  176. package/dist/utils/network-sync.d.ts +0 -36
  177. package/dist/utils/network-sync.d.ts.map +0 -1
  178. package/dist/utils/network-sync.js +0 -250
  179. package/dist/utils/network-sync.js.map +0 -1
  180. package/dist/utils/node-polyfills.d.ts +0 -9
  181. package/dist/utils/node-polyfills.d.ts.map +0 -1
  182. package/dist/utils/node-polyfills.js +0 -9
  183. package/dist/utils/node-polyfills.js.map +0 -1
  184. package/dist/utils/output.d.ts +0 -129
  185. package/dist/utils/output.d.ts.map +0 -1
  186. package/dist/utils/output.js +0 -368
  187. package/dist/utils/output.js.map +0 -1
  188. package/dist/utils/repo-factory.d.ts +0 -13
  189. package/dist/utils/repo-factory.d.ts.map +0 -1
  190. package/dist/utils/repo-factory.js +0 -46
  191. package/dist/utils/repo-factory.js.map +0 -1
  192. package/dist/utils/string-similarity.d.ts +0 -14
  193. package/dist/utils/string-similarity.d.ts.map +0 -1
  194. package/dist/utils/string-similarity.js +0 -39
  195. package/dist/utils/string-similarity.js.map +0 -1
  196. package/dist/utils/text-diff.d.ts +0 -37
  197. package/dist/utils/text-diff.d.ts.map +0 -1
  198. package/dist/utils/text-diff.js +0 -93
  199. package/dist/utils/text-diff.js.map +0 -1
  200. package/dist/utils/trace.d.ts +0 -19
  201. package/dist/utils/trace.d.ts.map +0 -1
  202. package/dist/utils/trace.js +0 -63
  203. package/dist/utils/trace.js.map +0 -1
  204. package/src/commands.ts +0 -1134
  205. package/src/core/change-detection.ts +0 -712
  206. package/src/core/config.ts +0 -313
  207. package/src/core/index.ts +0 -5
  208. package/src/core/move-detection.ts +0 -169
  209. package/src/core/snapshot.ts +0 -275
  210. package/src/core/sync-engine.ts +0 -1795
  211. package/src/types/config.ts +0 -111
  212. package/src/types/documents.ts +0 -91
  213. package/src/types/index.ts +0 -3
  214. package/src/types/snapshot.ts +0 -67
  215. package/src/utils/content.ts +0 -34
  216. package/src/utils/directory.ts +0 -73
  217. package/src/utils/fs.ts +0 -297
  218. package/src/utils/index.ts +0 -4
  219. package/src/utils/mime-types.ts +0 -244
  220. package/src/utils/network-sync.ts +0 -319
  221. package/src/utils/node-polyfills.ts +0 -8
  222. package/src/utils/output.ts +0 -450
  223. package/src/utils/repo-factory.ts +0 -73
  224. package/src/utils/string-similarity.ts +0 -54
  225. package/src/utils/text-diff.ts +0 -101
  226. package/src/utils/trace.ts +0 -70
  227. package/test/integration/README.md +0 -328
  228. package/test/integration/clone-test.sh +0 -310
  229. package/test/integration/conflict-resolution-test.sh +0 -309
  230. package/test/integration/debug-both-nested.sh +0 -74
  231. package/test/integration/debug-concurrent-nested.sh +0 -87
  232. package/test/integration/debug-nested.sh +0 -73
  233. package/test/integration/deletion-behavior-test.sh +0 -487
  234. package/test/integration/deletion-sync-test-simple.sh +0 -193
  235. package/test/integration/deletion-sync-test.sh +0 -297
  236. package/test/integration/exclude-patterns.test.ts +0 -144
  237. package/test/integration/full-integration-test.sh +0 -363
  238. package/test/integration/fuzzer.test.ts +0 -818
  239. package/test/integration/in-memory-sync.test.ts +0 -830
  240. package/test/integration/init-sync.test.ts +0 -89
  241. package/test/integration/manual-sync-test.sh +0 -84
  242. package/test/integration/sync-deletion.test.ts +0 -280
  243. package/test/integration/sync-flow.test.ts +0 -291
  244. package/test/jest.setup.ts +0 -34
  245. package/test/run-tests.sh +0 -225
  246. package/test/unit/deletion-behavior.test.ts +0 -249
  247. package/test/unit/enhanced-mime-detection.test.ts +0 -244
  248. package/test/unit/snapshot.test.ts +0 -404
  249. package/test/unit/sync-convergence.test.ts +0 -298
  250. package/test/unit/sync-timing.test.ts +0 -134
  251. package/test/unit/utils.test.ts +0 -366
@@ -1,363 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Comprehensive Integration Test for Pushwork
4
- # Tests all major functionality of the sync tool
5
-
6
- set -e # Exit on any error
7
-
8
- # Colors for output
9
- RED='\033[0;31m'
10
- GREEN='\033[0;32m'
11
- YELLOW='\033[1;33m'
12
- BLUE='\033[0;34m'
13
- NC='\033[0m' # No Color
14
-
15
- # Test configuration
16
- TEST_DIR="/tmp/pushwork-integration-test"
17
- PUSHWORK_CMD="node $(pwd)/dist/cli.js"
18
- CUSTOM_SYNC_SERVER="ws://localhost:3030"
19
- CUSTOM_STORAGE_ID="1d89eba7-f7a4-4e8e-80f2-5f4e2406f507"
20
-
21
- # Test counters
22
- TESTS_RUN=0
23
- TESTS_PASSED=0
24
- TESTS_FAILED=0
25
-
26
- # Helper functions
27
- log_info() {
28
- echo -e "${BLUE}[INFO]${NC} $1"
29
- }
30
-
31
- log_success() {
32
- echo -e "${GREEN}[PASS]${NC} $1"
33
- ((TESTS_PASSED++))
34
- }
35
-
36
- log_error() {
37
- echo -e "${RED}[FAIL]${NC} $1"
38
- ((TESTS_FAILED++))
39
- }
40
-
41
- log_warning() {
42
- echo -e "${YELLOW}[WARN]${NC} $1"
43
- }
44
-
45
- log_test() {
46
- echo -e "${YELLOW}[TEST]${NC} $1"
47
- ((TESTS_RUN++))
48
- }
49
-
50
- # Test wrapper function
51
- run_test() {
52
- local test_name="$1"
53
- local test_cmd="$2"
54
- local expected_exit_code="${3:-0}"
55
-
56
- log_test "$test_name"
57
-
58
- if [ "$expected_exit_code" = "0" ]; then
59
- if eval "$test_cmd" > /dev/null 2>&1; then
60
- log_success "$test_name"
61
- return 0
62
- else
63
- log_error "$test_name (command failed)"
64
- return 1
65
- fi
66
- else
67
- if eval "$test_cmd" > /dev/null 2>&1; then
68
- log_error "$test_name (expected failure but succeeded)"
69
- return 1
70
- else
71
- log_success "$test_name (correctly failed)"
72
- return 0
73
- fi
74
- fi
75
- }
76
-
77
- # Cleanup function
78
- cleanup() {
79
- log_info "Cleaning up test directory..."
80
- rm -rf "$TEST_DIR"
81
- }
82
-
83
- # Setup function
84
- setup() {
85
- log_info "Setting up integration test environment..."
86
-
87
- # Build the project first
88
- log_info "Building pushwork..."
89
- npm run build
90
-
91
- # Clean up any existing test directory
92
- rm -rf "$TEST_DIR"
93
- mkdir -p "$TEST_DIR"
94
- cd "$TEST_DIR"
95
-
96
- log_info "Test directory: $TEST_DIR"
97
- }
98
-
99
- # Test functions
100
-
101
- test_help_commands() {
102
- log_info "=== Testing Help Commands ==="
103
-
104
- run_test "pushwork --help" "$PUSHWORK_CMD --help"
105
- run_test "pushwork init --help" "$PUSHWORK_CMD init --help"
106
- run_test "pushwork clone --help" "$PUSHWORK_CMD clone --help"
107
- run_test "pushwork sync --help" "$PUSHWORK_CMD sync --help"
108
- run_test "pushwork status --help" "$PUSHWORK_CMD status --help"
109
- run_test "pushwork diff --help" "$PUSHWORK_CMD diff --help"
110
- run_test "pushwork commit --help" "$PUSHWORK_CMD commit --help"
111
- }
112
-
113
- test_init_functionality() {
114
- log_info "=== Testing Init Functionality ==="
115
-
116
- # Test init with default settings
117
- mkdir -p test-init-default
118
- cd test-init-default
119
- echo "Hello World" > test.txt
120
-
121
- run_test "init with default settings" "$PUSHWORK_CMD init ."
122
- run_test "check .pushwork directory exists" "[ -d .pushwork ]"
123
- run_test "check config file exists" "[ -f .pushwork/config.json ]"
124
- run_test "check snapshot file exists" "[ -f .pushwork/snapshot.json ]"
125
-
126
- cd ..
127
-
128
- # Test init with custom sync server
129
- mkdir -p test-init-custom
130
- cd test-init-custom
131
- echo "Custom Server Test" > custom.txt
132
-
133
- run_test "init with custom sync server" "$PUSHWORK_CMD init . --sync-server $CUSTOM_SYNC_SERVER --sync-server-storage-id $CUSTOM_STORAGE_ID"
134
-
135
- # Verify custom settings in config
136
- if [ -f .pushwork/config.json ]; then
137
- if grep -q "$CUSTOM_SYNC_SERVER" .pushwork/config.json; then
138
- log_success "custom sync server saved in config"
139
- ((TESTS_PASSED++))
140
- else
141
- log_error "custom sync server not found in config"
142
- ((TESTS_FAILED++))
143
- fi
144
- ((TESTS_RUN++))
145
-
146
- if grep -q "$CUSTOM_STORAGE_ID" .pushwork/config.json; then
147
- log_success "custom storage ID saved in config"
148
- ((TESTS_PASSED++))
149
- else
150
- log_error "custom storage ID not found in config"
151
- ((TESTS_FAILED++))
152
- fi
153
- ((TESTS_RUN++))
154
- fi
155
-
156
- cd ..
157
-
158
- # Test error cases
159
- run_test "init already initialized directory" "$PUSHWORK_CMD init test-init-default" 1
160
- run_test "init with only sync-server (should fail)" "$PUSHWORK_CMD init test-fail --sync-server $CUSTOM_SYNC_SERVER" 1
161
- run_test "init with only storage-id (should fail)" "$PUSHWORK_CMD init test-fail --sync-server-storage-id $CUSTOM_STORAGE_ID" 1
162
- }
163
-
164
- test_status_functionality() {
165
- log_info "=== Testing Status Functionality ==="
166
-
167
- cd test-init-default
168
- run_test "status in initialized directory" "$PUSHWORK_CMD status"
169
- cd ..
170
-
171
- run_test "status in non-initialized directory" "$PUSHWORK_CMD status" 1
172
- }
173
-
174
- test_commit_functionality() {
175
- log_info "=== Testing Commit Functionality ==="
176
-
177
- cd test-init-default
178
-
179
- # Add some files
180
- echo "New content" > new-file.txt
181
- echo "Modified content" >> test.txt
182
-
183
- run_test "commit with changes" "$PUSHWORK_CMD commit ."
184
- run_test "commit dry-run" "$PUSHWORK_CMD commit . --dry-run"
185
-
186
- cd ..
187
- }
188
-
189
- test_sync_functionality() {
190
- log_info "=== Testing Sync Functionality ==="
191
-
192
- cd test-init-default
193
-
194
- run_test "sync in initialized directory" "$PUSHWORK_CMD sync"
195
- run_test "sync dry-run" "$PUSHWORK_CMD sync --dry-run"
196
- run_test "sync local-only" "$PUSHWORK_CMD sync --local-only"
197
-
198
- cd ..
199
- }
200
-
201
- test_diff_functionality() {
202
- log_info "=== Testing Diff Functionality ==="
203
-
204
- cd test-init-default
205
-
206
- # Make some changes
207
- echo "Diff test content" > diff-test.txt
208
-
209
- run_test "diff command" "$PUSHWORK_CMD diff"
210
- run_test "diff name-only" "$PUSHWORK_CMD diff --name-only"
211
- run_test "diff local-only" "$PUSHWORK_CMD diff --local-only"
212
-
213
- cd ..
214
- }
215
-
216
- test_clone_functionality() {
217
- log_info "=== Testing Clone Functionality ==="
218
-
219
- # First, we need a valid URL to clone from the initialized directory
220
- cd test-init-default
221
-
222
- if [ -f .pushwork/snapshot.json ]; then
223
- ROOT_URL=$($PUSHWORK_CMD url .)
224
-
225
- if [ -n "$ROOT_URL" ]; then
226
- cd ..
227
-
228
- # Test clone with default settings
229
- run_test "clone with default settings" "$PUSHWORK_CMD clone $ROOT_URL test-clone-default"
230
-
231
- if [ -d test-clone-default ]; then
232
- run_test "cloned directory has .pushwork" "[ -d test-clone-default/.pushwork ]"
233
- run_test "cloned directory has files" "[ -f test-clone-default/test.txt ]"
234
- fi
235
-
236
- # Test clone with custom sync server
237
- run_test "clone with custom sync server" "$PUSHWORK_CMD clone $ROOT_URL test-clone-custom --sync-server $CUSTOM_SYNC_SERVER --sync-server-storage-id $CUSTOM_STORAGE_ID"
238
-
239
- # Test clone error cases
240
- mkdir -p existing-dir
241
- echo "existing" > existing-dir/file.txt
242
- run_test "clone to non-empty directory (should fail)" "$PUSHWORK_CMD clone $ROOT_URL existing-dir" 1
243
- run_test "clone with force to non-empty directory" "$PUSHWORK_CMD clone $ROOT_URL existing-dir --force"
244
-
245
- run_test "clone with only sync-server (should fail)" "$PUSHWORK_CMD clone $ROOT_URL test-fail --sync-server $CUSTOM_SYNC_SERVER" 1
246
- run_test "clone with only storage-id (should fail)" "$PUSHWORK_CMD clone $ROOT_URL test-fail --sync-server-storage-id $CUSTOM_STORAGE_ID" 1
247
- else
248
- log_warning "No valid root URL found, skipping clone tests"
249
- fi
250
- else
251
- log_warning "Snapshot missing - repository not properly initialized, skipping clone tests"
252
- fi
253
-
254
- cd ..
255
- }
256
-
257
- test_bidirectional_sync() {
258
- log_info "=== Testing Bidirectional Sync ==="
259
-
260
- # This test requires both directories to be properly initialized
261
- if [ -d test-init-default ] && [ -d test-clone-default ]; then
262
- # Add content in original
263
- cd test-init-default
264
- echo "From original" > sync-test.txt
265
- $PUSHWORK_CMD commit . > /dev/null 2>&1 || true
266
- cd ..
267
-
268
- # Add different content in clone
269
- cd test-clone-default
270
- echo "From clone" > sync-test-clone.txt
271
- $PUSHWORK_CMD commit . > /dev/null 2>&1 || true
272
- cd ..
273
-
274
- # Try to sync both
275
- cd test-init-default
276
- run_test "sync from original" "$PUSHWORK_CMD sync --local-only"
277
- cd ..
278
-
279
- cd test-clone-default
280
- run_test "sync from clone" "$PUSHWORK_CMD sync --local-only"
281
- cd ..
282
- else
283
- log_warning "Clone directories not available, skipping bidirectional sync test"
284
- fi
285
- }
286
-
287
- test_file_operations() {
288
- log_info "=== Testing File Operations ==="
289
-
290
- mkdir -p test-file-ops
291
- cd test-file-ops
292
-
293
- # Initialize
294
- $PUSHWORK_CMD init . > /dev/null 2>&1
295
-
296
- # Test various file operations
297
- echo "Text file" > text.txt
298
- echo -e "\x89PNG\r\n\x1a\n" > binary.png # Fake PNG header
299
- mkdir -p subdir
300
- echo "Subdirectory file" > subdir/nested.txt
301
-
302
- run_test "commit various file types" "$PUSHWORK_CMD commit ."
303
- run_test "status after file operations" "$PUSHWORK_CMD status"
304
-
305
- # Modify files
306
- echo "Modified text" >> text.txt
307
- rm binary.png
308
- echo "New file" > new.txt
309
-
310
- run_test "diff after modifications" "$PUSHWORK_CMD diff --name-only"
311
- run_test "commit modifications" "$PUSHWORK_CMD commit ."
312
-
313
- cd ..
314
- }
315
-
316
- # Main test execution
317
- main() {
318
- echo "======================================"
319
- echo "Pushwork Integration Test Suite"
320
- echo "======================================"
321
-
322
- # Trap cleanup on exit
323
- trap cleanup EXIT
324
-
325
- # Setup
326
- setup
327
-
328
- # Run all tests
329
- test_help_commands
330
- test_init_functionality
331
- test_status_functionality
332
- test_commit_functionality
333
- test_sync_functionality
334
- test_diff_functionality
335
- test_clone_functionality
336
- test_bidirectional_sync
337
- test_file_operations
338
-
339
- # Summary
340
- echo ""
341
- echo "======================================"
342
- echo "Test Results Summary"
343
- echo "======================================"
344
- echo "Tests Run: $TESTS_RUN"
345
- echo "Tests Passed: $TESTS_PASSED"
346
- echo "Tests Failed: $TESTS_FAILED"
347
-
348
- if [ $TESTS_FAILED -eq 0 ]; then
349
- log_success "All tests passed!"
350
- exit 0
351
- else
352
- log_error "Some tests failed!"
353
- exit 1
354
- fi
355
- }
356
-
357
- # Check if jq is available (optional dependency)
358
- if ! command -v jq &> /dev/null; then
359
- log_warning "jq is not installed - some tests may be skipped"
360
- fi
361
-
362
- # Run the tests
363
- main "$@"