// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
import 'dart:convert';
import 'package:aws_common/aws_common.dart';
import 'package:test/test.dart';
void main() {
group('HttpPayload', () {
test('empty', () {
expect(const HttpPayload.empty(), emitsDone);
});
test('string', () {
expect(
HttpPayload.string('Hello'),
emitsInOrder([
'Hello'.codeUnits,
emitsDone,
]),
);
});
test('bytes', () {
expect(
HttpPayload.bytes('Hello'.codeUnits),
emitsInOrder([
'Hello'.codeUnits,
emitsDone,
]),
);
});
test('formFields', () {
expect(
HttpPayload.formFields({'key1': 'value1', 'key2': 'value2'}),
emitsInOrder([
'key1=value1&key2=value2'.codeUnits,
emitsDone,
]),
);
});
test('json', () {
expect(
HttpPayload.json({'key1': 'value1', 'key2': 'value2'}),
emitsInOrder([
'{"key1":"value1","key2":"value2"}'.codeUnits,
emitsDone,
]),
);
});
test('streaming', () {
expect(
HttpPayload.streaming(
Stream.fromIterable([
[1],
[2],
[3],
[4],
[5],
]),
),
emitsInOrder([
[1],
[2],
[3],
[4],
[5],
emitsDone,
]),
);
});
group('dataUrl', () {
test('text without base64 encoding', () {
const testDataUrl =
'data:text/plain;charset=UTF-8;page=21,the%20data:1234,5678';
final payload = HttpPayload.dataUrl(testDataUrl);
expect(payload.contentType, 'text/plain;charset=UTF-8;page=21');
expect(
payload,
emitsInOrder([utf8.encode('the data:1234,5678'), emitsDone]),
);
});
test('text with base64 encoding', () {
const testDataUrl = 'data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==';
final payload = HttpPayload.dataUrl(testDataUrl);
expect(payload.contentType, 'text/plain');
expect(
payload,
emitsInOrder([utf8.encode('Hello, World!'), emitsDone]),
);
});
test('image with base64 encoding', () {
const testDataUrl =
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';
final payload = HttpPayload.dataUrl(testDataUrl);
expect(payload.contentType, 'image/png');
expect(
payload,
emitsInOrder([
base64Decode(
'iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==',
),
emitsDone,
]),
);
});
test('js script', () {
const testDataUrl = 'data:text/html,';
final payload = HttpPayload.dataUrl(testDataUrl);
expect(payload.contentType, 'text/html');
expect(
payload,
emitsInOrder(
[utf8.encode(''), emitsDone],
),
);
});
test('utf8 encoding', () {
const testDataUrl =
'data:text/plain;charset=utf-8,Hello%20Amplify%20%E2%9D%A4%EF%B8%8F%F0%9F%91%8B%21';
final payload = HttpPayload.dataUrl(testDataUrl);
expect(payload.contentType, 'text/plain;charset=utf-8');
expect(
payload,
emitsInOrder([utf8.encode('Hello Amplify ❤️👋!'), emitsDone]),
);
});
});
});
}