106 lines
		
	
	
	
		
			2.7 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			106 lines
		
	
	
	
		
			2.7 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
// Copyright 2023 Signal Messenger, LLC
 | 
						|
// SPDX-License-Identifier: AGPL-3.0-only
 | 
						|
 | 
						|
import { assert } from 'chai';
 | 
						|
 | 
						|
import type { WritableDB } from '../../sql/Interface';
 | 
						|
import { createDB, updateToVersion, insertData, getTableData } from './helpers';
 | 
						|
 | 
						|
describe('SQL/updateToSchemaVersion90', () => {
 | 
						|
  let db: WritableDB;
 | 
						|
 | 
						|
  beforeEach(() => {
 | 
						|
    db = createDB();
 | 
						|
  });
 | 
						|
 | 
						|
  afterEach(() => {
 | 
						|
    db.close();
 | 
						|
  });
 | 
						|
 | 
						|
  it('should delete screenshot.data but leave remainder', () => {
 | 
						|
    updateToVersion(db, 89);
 | 
						|
    insertData(db, 'messages', [
 | 
						|
      {
 | 
						|
        id: 'message_with_screenshot_data',
 | 
						|
        json: {
 | 
						|
          id: 'message_with_screenshot_data',
 | 
						|
          storyReplyContext: {
 | 
						|
            attachment: {
 | 
						|
              contentType: 'video/mp4',
 | 
						|
              filename: 'filename',
 | 
						|
              path: 'path',
 | 
						|
              screenshot: {
 | 
						|
                contentType: 'image/png',
 | 
						|
                path: 'screenshotPath',
 | 
						|
                width: 1920,
 | 
						|
                height: 1080,
 | 
						|
              },
 | 
						|
              screenshotData: {
 | 
						|
                '4389410': 144,
 | 
						|
                '4389411': 255,
 | 
						|
                '4389412': 75,
 | 
						|
                '4389413': 168,
 | 
						|
                '4389414': 81,
 | 
						|
                '4389415': 142,
 | 
						|
                '4389416': 120,
 | 
						|
                '4389417': 150,
 | 
						|
                '4389418': 14,
 | 
						|
              },
 | 
						|
              size: 100,
 | 
						|
            },
 | 
						|
            messageId: 'story_id',
 | 
						|
          },
 | 
						|
        },
 | 
						|
        storyId: 'story_id',
 | 
						|
      },
 | 
						|
    ]);
 | 
						|
 | 
						|
    updateToVersion(db, 90);
 | 
						|
 | 
						|
    assert.deepStrictEqual(
 | 
						|
      getTableData(db, 'messages').map(msg => msg.json),
 | 
						|
      [
 | 
						|
        {
 | 
						|
          id: 'message_with_screenshot_data',
 | 
						|
          storyReplyContext: {
 | 
						|
            attachment: {
 | 
						|
              contentType: 'video/mp4',
 | 
						|
              filename: 'filename',
 | 
						|
              path: 'path',
 | 
						|
              screenshot: {
 | 
						|
                contentType: 'image/png',
 | 
						|
                path: 'screenshotPath',
 | 
						|
                width: 1920,
 | 
						|
                height: 1080,
 | 
						|
              },
 | 
						|
              size: 100,
 | 
						|
            },
 | 
						|
            messageId: 'story_id',
 | 
						|
          },
 | 
						|
        },
 | 
						|
      ]
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  it('should use storyId index', () => {
 | 
						|
    updateToVersion(db, 90);
 | 
						|
 | 
						|
    const details = db
 | 
						|
      .prepare(
 | 
						|
        `
 | 
						|
        EXPLAIN QUERY PLAN
 | 
						|
        UPDATE messages
 | 
						|
        SET json = json_remove(json, '$.storyReplyContext.attachment.screenshotData')
 | 
						|
        WHERE isStory = 0
 | 
						|
        AND storyId > '0'
 | 
						|
        AND json->'storyReplyContext.attachment.screenshotData' IS NOT NULL;
 | 
						|
        `
 | 
						|
      )
 | 
						|
      .all()
 | 
						|
      .map(({ detail }) => detail)
 | 
						|
      .join('\n');
 | 
						|
 | 
						|
    assert.include(details, 'USING INDEX messages_by_storyId');
 | 
						|
    assert.notInclude(details, 'SCAN');
 | 
						|
  });
 | 
						|
});
 |