flutter_fixtures_sqflite 0.1.0 copy "flutter_fixtures_sqflite: ^0.1.0" to clipboard
flutter_fixtures_sqflite: ^0.1.0 copied to clipboard

SQLite/sqflite implementation for Flutter Fixtures - mock database queries with fixture files

Flutter Fixtures SQLite #

pub package

SQLite/sqflite implementation for the Flutter Fixtures library. Mock database queries with fixture files for testing and development.

🎯 Purpose #

This package provides a DataQuery implementation for SQLite databases, allowing you to:

  • Mock database queries during development and testing
  • Test different data scenarios without modifying the database
  • Develop UI features before the database schema is finalized
  • Create reproducible test scenarios

πŸ“¦ What's Included #

FixtureDatabase #

A drop-in replacement for sqflite's Database that returns fixture data. Provides the same familiar API (query, insert, update, delete) so you can swap between fixture and real databases easily.

SqfliteDataQuery #

A data provider that loads fixture files from your app's assets and returns mock database results.

SqfliteQuery #

A model class representing database queries for fixture matching.

πŸš€ Installation #

Add the package to your pubspec.yaml:

dependencies:
  flutter_fixtures_sqflite: ^0.1.0
  sqflite: ^2.4.1

πŸ“ Fixture File Structure #

Create fixture files in assets/fixtures/database/ directory:

assets/
  fixtures/
    database/
      query_users.json
      query_products.json
      insert_orders.json

Fixture File Format #

{
  "description": "User table query fixtures",
  "values": [
    {
      "identifier": "success",
      "description": "Returns list of users",
      "default": true,
      "data": [
        {"id": 1, "name": "John", "email": "john@example.com"},
        {"id": 2, "name": "Jane", "email": "jane@example.com"}
      ]
    },
    {
      "identifier": "empty",
      "description": "Returns empty result",
      "data": []
    },
    {
      "identifier": "single",
      "description": "Returns single user",
      "data": [
        {"id": 1, "name": "John", "email": "john@example.com"}
      ]
    }
  ]
}

πŸ’‘ Usage #

Use FixtureDatabase as a drop-in replacement for sqflite's Database:

import 'package:flutter_fixtures_sqflite/flutter_fixtures_sqflite.dart';
import 'package:flutter_fixtures_core/flutter_fixtures_core.dart';

// Create a fixture database (same API as sqflite's Database)
final db = FixtureDatabase(
  dataQuery: SqfliteDataQuery(),
  dataSelector: DataSelectorType.defaultValue(),
);

// Query just like a real sqflite database!
final users = await db.query('users');
final products = await db.query('products', where: 'category = ?');

// Insert, update, delete also work
final id = await db.insert('users', {'name': 'John', 'email': 'john@example.com'});
await db.update('users', {'name': 'Jane'}, where: 'id = ?');
await db.delete('users', where: 'id = ?');

With Interactive Fixture Selection #

final db = FixtureDatabase(
  dataQuery: SqfliteDataQuery(),
  dataSelector: DataSelectorType.pick(),
  dataSelectorView: FixturesDialogView(context: context),
  delay: DataSelectorDelay.fast,
);

// When querying, a dialog will let you pick which fixture to return
final users = await db.query('users');

Low-Level API #

For more control, use SqfliteDataQuery directly:

final dataQuery = SqfliteDataQuery();

// Create a query
final query = SqfliteQuery.table(
  table: 'users',
  operation: SqfliteOperation.query,
);

// Find and parse fixtures
final fixtureData = await dataQuery.find(query);
if (fixtureData != null) {
  final collection = await dataQuery.parse(fixtureData);
  final selected = await dataQuery.select(
    collection!,
    null,
    DataSelectorType.defaultValue(),
  );
  final result = await dataQuery.data(selected!);
  print(result);
}

File Naming Convention #

Files should be named based on the query operation and table:

Query Type File Name
SELECT on users query_users.json
INSERT on users insert_users.json
UPDATE on users update_users.json
DELETE on users delete_users.json
SELECT with WHERE query_users_id_1.json
Raw SQL query rawQuery_{normalized_sql}.json

πŸ“„ License #

MIT License - see LICENSE for details.

0
likes
140
points
146
downloads

Publisher

unverified uploader

Weekly Downloads

SQLite/sqflite implementation for Flutter Fixtures - mock database queries with fixture files

Repository (GitHub)
View/report issues
Contributing

Topics

#mock #database #sqlite #testing #fixtures

Documentation

Documentation
API reference

License

MIT (license)

Dependencies

flutter, flutter_fixtures_core, sqflite

More

Packages that depend on flutter_fixtures_sqflite