test(e2e): webdav + nextcloud full e2e test coverage
add a full coverage of Webdav and Nextcloud
purpose: prepare move to Drives and ensure no regression at all
test scenarios are in docs/plan/BASELINE_TESTS_NC_WEBDAV.md
current existing bugs identified via these tests:
┌──────────┬─────────┬────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Bug │ Surface │ Pin location │
├──────────┼─────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ G4/G5/K5 │ NC │ AlreadyExists → 500 instead of 412 (handle_move + trashbin restore) │
├──────────┼─────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ G9 │ NC │ Folder DELETE not row-recursive — orphan descendants stay live │
├──────────┼─────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ M5/M7 │ Native │ resolve_path_for_user mismatch — PUT writes, GET reads via lenient lookup, MOVE/DELETE can't find │
│ │ │ via strict │
├──────────┼─────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ M8 │ Native │ COPY discards destination filename — collides with source │
├──────────┼─────────┼────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ N2 │ Native │ LOCK creates the token, mutators don't check it — class-2 advertisement is aspirational │
└──────────┴─────────┴────────────────────────────────────────────────────────────────────────────────────────────────────┘
This commit is contained in:
@@ -36,9 +36,9 @@ OXICLOUD_CHUNK_MAX_BYTES=4194304
|
||||
OXICLOUD_DIRECT_PUT_MAX_BYTES=4194304
|
||||
|
||||
# grow up limits for tests
|
||||
OXICLOUD_RATE_LIMIT_REFRESH_MAX=360
|
||||
OXICLOUD_RATE_LIMIT_LOGIN_MAX=360
|
||||
OXICLOUD_RATE_LIMIT_REGISTER_MAX=360
|
||||
OXICLOUD_RATE_LIMIT_REFRESH_MAX=3600
|
||||
OXICLOUD_RATE_LIMIT_LOGIN_MAX=3600
|
||||
OXICLOUD_RATE_LIMIT_REGISTER_MAX=3600
|
||||
|
||||
# Magic-link / external-users flow (PR 9). The mock SMTP captures every
|
||||
# outbound message in-process so external_users.hurl can retrieve the
|
||||
@@ -58,3 +58,6 @@ OXICLOUD_ALLOW_EXTERNAL_USERS=true
|
||||
OXICLOUD_MAGIC_LINK_INVITE_PER_CALLER_PER_HOUR=3
|
||||
OXICLOUD_MAGIC_LINK_SEND_PER_EMAIL_PER_HOUR=2
|
||||
OXICLOUD_MAGIC_LINK_SEND_PER_IP_PER_HOUR=50
|
||||
|
||||
# permits IP spoofing for tests
|
||||
OXICLOUD_TRUST_PROXY_HEADERS=true
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env bash
|
||||
# Shared helper: wipe a test-storage directory.
|
||||
#
|
||||
# Source this file (don't execute it):
|
||||
#
|
||||
# source "$COMMON/wipe-storage.sh"
|
||||
# wipe_storage "$OXICLOUD_STORAGE_PATH"
|
||||
#
|
||||
# The path must end in `tests/<name>/storage` (lowercase alphanumeric
|
||||
# `<name>`). Anything else is rejected — defends against a typo'd or
|
||||
# unexpanded env var feeding the wrong path to `rm -rf`. Examples that
|
||||
# pass:
|
||||
#
|
||||
# /home/dev/oxicloud/tests/api/storage
|
||||
# /home/dev/oxicloud/tests/webdav/storage
|
||||
# /home/dev/oxicloud/tests/e2e/storage
|
||||
#
|
||||
# Examples that the sanity check rejects (each would refuse the wipe):
|
||||
#
|
||||
# / — no tests/<x>/storage suffix
|
||||
# $HOME — same
|
||||
# tests/api — missing /storage
|
||||
# /tests/storage — missing the <name> segment
|
||||
#
|
||||
# Postgres state is wiped by `spawn-db.sh` (`docker compose down -v`);
|
||||
# this helper is the filesystem equivalent.
|
||||
|
||||
wipe_storage() {
|
||||
local path="$1"
|
||||
|
||||
if [[ -z "$path" ]]; then
|
||||
echo "[wipe_storage] ERROR: missing path arg" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Sanity check: must end in tests/<name>/storage where <name> is
|
||||
# lowercase alphanumeric. Stops `rm -rf` from ever running against
|
||||
# an unexpected expansion of a callerʼs path.
|
||||
if [[ ! "$path" =~ /tests/[a-z0-9]+/storage$ ]]; then
|
||||
echo "[wipe_storage] ERROR: '$path' does not match .../tests/<name>/storage — refusing to wipe" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "[wipe_storage] Wipe $path to ensure clean startup"
|
||||
rm -rf "$path"
|
||||
mkdir -p "$path"
|
||||
}
|
||||
Reference in New Issue
Block a user