// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

@TestOn('vm')
import 'dart:io';

import 'package:http/http.dart' as http;
import 'package:shelf/shelf.dart';
import 'package:shelf_test_handler/shelf_test_handler.dart';
import 'package:shelf_web_socket/shelf_web_socket.dart';
import 'package:test/test.dart';
import 'package:web_socket_channel/web_socket_channel.dart';

void main() {
  test('serves a ShelfTestHandler', () async {
    var server = await ShelfTestServer.create();
    addTearDown(server.close);

    server.handler.expect('GET', '/', expectAsync1((_) => Response.ok('')));
    var response = await http.get(server.url);
    expect(response.statusCode, equals(200));
  });

  test('supports request hijacking', () async {
    var server = await ShelfTestServer.create();
    addTearDown(server.close);

    server.handler.expect('GET', '/',
        webSocketHandler((WebSocketChannel webSocket) {
      webSocket.sink.add('hello!');
      webSocket.sink.close();
    }));

    var webSocket =
        await WebSocket.connect('ws://localhost:${server.url.port}');
    expect(webSocket, emits('hello!'));
  });
}
