Flipping Utilities Fork - Testing & Validation
Testing artifacts and validation results for the Flipping Utilities RuneLite plugin fork that adds SQLite storage and GE history import .
1. SQLite Storage (replaces JSON files)
Trade data stored in ~/.runelite/flipping/flipping.db instead of per-account JSON files
Each trade saved instantly via WAL-mode SQLite -- crash-proof, no more full-file rewrites
Automatic one-time migration from JSON on first run (originals renamed to .pre-sqlite)
2. GE History Import (up to 5 months of trade history)
One-click sync : Reads trade history directly from RuneLite's ConfigManager (requires OSRS login)
Manual import : File chooser for JSON exported from runelite.net/account/grand-exchange
Smart deduplication prevents double-importing (matched by timestamp)
Item names/limits resolved via OSRS Wiki API with RuneLite ItemManager fallback
Phase
Test
Result
0
Compilation
PASS
1
Fresh Install
PENDING
2
JSON to SQLite Migration
PASS
3
Incremental Save
BLOCKED (requires OSRS login)
4
GE History File Import
PASS
4a
Double-Import Deduplication
PASS
5
Auto Sync
PARTIAL PASS
6
Post-Import Trading
BLOCKED (requires OSRS login)
7
Multi-Account Support
PASS
8
Import Button UI
PASS
9
JSON Fallback
PASS
10
Clean Shutdown
PASS
11a
Accountwide Import Block
PASS
11b
Wrong File Format
PASS
11c
CSV Export After Import
PASS
11d
Time Interval Filters
PASS
12 passed, 1 partial pass, 2 blocked (require in-game login), 1 pending
Bug
Severity
Status
Import buttons placed in dead SettingsPanel class (never instantiated)
High
Fixed -- moved to Stats tab
Import into "Accountwide" view causes data duplication
Medium
Fixed -- blocked with warning
SQLite JDBC silently replaces corrupted db instead of triggering fallback
Low
Fixed -- header validation before connection
Running the Automated Tests
# Download your GE history from https://runelite.net/account/grand-exchange
python run_tests.py --ge-file path/to/grand-exchange.json
This validates:
JSON schema and field types
Wiki API item coverage for all traded items
Deduplication logic (exact timestamp + fuzzy matching)
OfferEvent conversion conventions (slot=-1, ticksSinceFirstOffer=10)
Import preview with item name resolution
New/Modified Source Files
File
Purpose
SqliteSchema.java
DDL for all database tables
SqliteDataStore.java
SQLite CRUD operations (WAL mode)
JsonToSqliteMigrator.java
One-time JSON to SQLite migration
GeHistoryImporter.java
GE history conversion + dedup + merge
RuneliteGeHistoryFetcher.java
Reads GE history from RuneLite config
OsrsItemMapper.java
Item ID to name/limit resolution (Wiki API + ItemManager)
File
Changes
build.gradle
Added sqlite-jdbc:3.46.1.0 dependency
DataHandler.java
SQLite backend with JSON fallback
FlippingPlugin.java
Wired sync/import methods, SQLite shutdown
NewOfferEventPipelineHandler.java
Incremental save after each offer
StatsPanel.java
Import button (upload icon) with popup menu
Icons.java
Upload icon (rotated download icon)
JDK : Eclipse Temurin 11 (source compatibility: Java 8)
Gradle : 6.6.1 (bundled wrapper)
SQLite JDBC : 3.46.1.0
Upstream : Flipping-Utilities/rl-plugin