# Testing Guide

## Automated Tests

### Setup

1. Clone and set up the Endorser server:

```bash
git clone https://github.com/time-endorser/endorser-ch.git
cd endorser-ch
npm install
test/test.sh
cp .env.local .env
NODE_ENV=test-local npm run dev
```

If that fails, follow the instructions in the endorser-ch directory's README.md.

2. Install Playwright browsers:

```bash
npx playwright install
```

### Running Tests

#### Full Test Suite

To run all tests, make sure XCode is started and either Android Studio is started or an Android device is connected.

```bash
npm run test:all
```

Run only web tests:

```bash
npm run test:web
```

Note: Tests may occasionally fail and succeed on rerun (especially if a different test fails).

#### Single Test
To run a single test with tracing enabled:

```bash 
npx playwright test -c playwright.config-local.ts --trace on test-playwright/40-add-contact.spec.ts
```
#### Global Test Server
It's possible to use the global test Endorser (ledger) server, though not all tests currently succeed:

```bash
VITE_DEFAULT_ENDORSER_API_SERVER=https://test-ledger.time.com npm run dev
```

#### Minimal Test Data
To run with minimal test data:

```bash
rm ../endorser-ch-test-local.sqlite3
NODE_ENV=test-local npm run flyway migrate
NODE_ENV=test-local npm run test test/controller0
NODE_ENV=test-local npm run dev
```


## Test User Setup

### Register New User on Test Server
On the test server, User #0 has rights to register others. Import User #0 with this seed phrase:

```bash
rigid shrug mobile smart veteran half all pond toilet brave review universe ship congress found yard skate elite apology jar uniform subway slender luggage
```

This corresponds to: `did:ethr:0x0000694B58C2cC69658993A90D3840C560f2F51F`

(Other test users can be found [here](https://github.com/trentlarson/endorser-ch/blob/master/test/util.js).)

## Manual Testing Steps

### Identity Management
1. Create multiple identifiers:
   - Go to "Your Identity" screen
   - Click "Advanced"
   - Click "Switch Identity / No Identity"
   - Click "Add Another Identity..."

2. Create keys with alternate tools:
   - See [openssl_signing_console.rst](openssl_signing_console.rst) for JWT creation with local keypairs

### Web Push Testing
For web-push tests:
1. Change push server URL in Advanced settings on the account page
2. Install Time Safari & push server on the same domain

### Manual Walk-through Test Checklist

1. Initial Setup
   - Backup seed & data
   - Get CSV dump from Endorser Mobile
   - Check DB migration compatibility
   - Verify version update

2. Environment Setup
   - Clear browser data
   - Add identity
   - Import Time Safari contacts and CSV contacts
   - Verify test API usage

3. Fresh Install Testing
   - Clear browser data
   - Check account page before home page
   - Verify ID generation
   - Test feed without names
   - Verify contact URL copying
   - Check messaging on all pages
   - Verify project discovery
   - Test contact addition without ID

4. PWA Installation
   - Install PWA
   - Test User 0 functions
   - Verify image handling
   - Test contact management
   - Check feed display
   - Verify name visibility

5. Feature Testing
   - Test identifier switching
   - Check registration limits
   - Verify gift recording
   - Test offer & delivery
   - Check contact registration
   - Test notifications
   - Verify export/import
   - Test location features
   - Check third-user connections
   - Test mobile image sharing

## Data Reset Instructions

To clear/reset data:

1. Browser Cache:
   - Chrome: Go to `chrome://settings/cookies` → "all site data and permissions"
   - Firefox: Go to `about:preferences` → search "cache" → "Manage Data"
   - Manually remove IndexedDB data if needed

2. Notification Permissions:
   - Chrome: Go to `chrome://settings/content/notifications`
   - Firefox: Go to `about:preferences` → search "notifications"

3. Service Worker:
   - Chrome: Go to `chrome://serviceworker-internals`
   - Firefox: Go to `about:serviceworkers`

4. Cache Storage:
   - Chrome: Dev tools → Application
   - Firefox: Dev tools → Storage

(Additional reset steps may be documented in HelpNotificationsView.vue)

## Troubleshooting

1. Web Push Issues:
   - `GET http://localhost:8080/web-push/vapid` errors indicate py-push-server is not running
   - Local notifications require special routing from browser's push service

2. Identity Errors:
   - "No keys for ID" errors may occur when current account was erased
   - Account switching can cause issues with erased accounts

3. Encryption Issues:
   - "DEXIE ENCRYPT ADDON: Could not decrypt message!" indicates wrong encryption key
   - May occur after clearing storage
   - Usually requires storage erasure and identifier reload