seedDefaults method

void seedDefaults()

Seeds the store with 3 standard test documents of type test_all_fields and 4 media assets.

This reproduces the legacy auto-seed behaviour. Useful in setUp blocks that need a pre-populated store:

setUp(() { dataSource = MockDataSource()..seedDefaults(); });

Implementation

void seedDefaults() {
  for (final seed in _kDefaultDocumentSeedData) {
    final docId = _genDocId();
    final versionId = _genVersionId();
    final now = DateTime.now();

    _documents[docId] = DeskDocument(
      id: docId,
      clientId: 'mock-client-1',
      documentType: 'test_all_fields',
      title: seed['title'] as String,
      slug: seed['slug'] as String,
      isDefault: _nextDocId == 2, // first doc
      activeVersionData: seed['data'] as Map<String, dynamic>,
      createdAt: now,
      updatedAt: now,
    );

    _versions[docId] = {
      versionId: DocumentVersion(
        id: versionId,
        documentId: docId,
        versionNumber: 1,
        status: _nextDocId == 2
            ? DocumentVersionStatus.published
            : DocumentVersionStatus.draft,
        changeLog: 'Initial version',
        createdAt: now,
        publishedAt: _nextDocId == 2 ? now : null,
      ),
    };

    _versionData[versionId] = Map<String, dynamic>.from(
      seed['data'] as Map<String, dynamic>,
    );
  }

  // Add a second version to first document (draft on top of published)
  final firstDocId = _documents.keys.first;
  final secondVersionId = _genVersionId();
  _versions[firstDocId]![secondVersionId] = DocumentVersion(
    id: secondVersionId,
    documentId: firstDocId,
    versionNumber: 2,
    status: DocumentVersionStatus.draft,
    changeLog: 'Updated string field',
    createdAt: DateTime.now(),
  );
  _versionData[secondVersionId] = {
    ..._kDefaultDocumentSeedData[0]['data'] as Map<String, dynamic>,
    'string_field': 'Hello World (v2)',
  };

  // Seed media assets for testing
  _media['asset-hero'] = MediaAsset(
    id: _genMediaId(),
    assetId: 'asset-hero',
    fileName: 'hero-banner.jpg',
    mimeType: 'image/jpeg',
    fileSize: 245000,
    publicUrl: 'https://picsum.photos/seed/hero/800/400',
    width: 800,
    height: 400,
    hasAlpha: false,
    blurHash: 'LEHV6nWB2yk8pyo0adR*.7kCMdnj',
    createdAt: DateTime(2026, 3, 1),
    metadataStatus: MediaAssetMetadataStatus.complete,
  );
  _media['asset-profile'] = MediaAsset(
    id: _genMediaId(),
    assetId: 'asset-profile',
    fileName: 'profile-photo.png',
    mimeType: 'image/png',
    fileSize: 128000,
    publicUrl: 'https://picsum.photos/seed/profile/400/400',
    width: 400,
    height: 400,
    hasAlpha: true,
    blurHash: 'LGF5]+Yk^6#M@-5c,1J5@[or[Q6.',
    createdAt: DateTime(2026, 3, 5),
    metadataStatus: MediaAssetMetadataStatus.complete,
  );
  _media['asset-landscape'] = MediaAsset(
    id: _genMediaId(),
    assetId: 'asset-landscape',
    fileName: 'mountain-landscape.jpg',
    mimeType: 'image/jpeg',
    fileSize: 512000,
    publicUrl: 'https://picsum.photos/seed/landscape/1200/800',
    width: 1200,
    height: 800,
    hasAlpha: false,
    blurHash: 'LdKBt%j[WBay~qj[j[j[WBayfQfQ',
    createdAt: DateTime(2026, 3, 10),
    metadataStatus: MediaAssetMetadataStatus.complete,
  );
  _media['asset-icon'] = MediaAsset(
    id: _genMediaId(),
    assetId: 'asset-icon',
    fileName: 'app-icon.png',
    mimeType: 'image/png',
    fileSize: 24000,
    publicUrl: 'https://picsum.photos/seed/icon/128/128',
    width: 128,
    height: 128,
    hasAlpha: true,
    blurHash: 'L6PZfSi_.AyE_3t7t7R**0o#DgR4',
    createdAt: DateTime(2026, 3, 15),
    metadataStatus: MediaAssetMetadataStatus.complete,
  );
}