import 'package:np_api/np_api.dart';
import 'package:test/test.dart';

void main() {
  group("RecognizeFaceParser", () {
    group("parse", () {
      test("empty", _empty);
      test("unnamed", _unnamed);
      test("named", _named);
    });
  });
}

Future<void> _empty() async {
  const xml = """
<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns" xmlns:nc="http://nextcloud.org/ns">
  <d:response>
    <d:href>/remote.php/dav/recognize/admin/faces/</d:href>
    <d:propstat>
      <d:prop>
        <d:resourcetype>
          <d:collection/>
        </d:resourcetype>
      </d:prop>
      <d:status>HTTP/1.1 200 OK</d:status>
    </d:propstat>
  </d:response>
</d:multistatus>
""";
  final results = await RecognizeFaceParser().parse(xml);
  expect(
    results,
    const [
      RecognizeFace(href: "/remote.php/dav/recognize/admin/faces/"),
    ],
  );
}

Future<void> _unnamed() async {
  const xml = """
<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns" xmlns:nc="http://nextcloud.org/ns">
  <d:response>
    <d:href>/remote.php/dav/recognize/admin/faces/</d:href>
    <d:propstat>
      <d:prop>
        <d:resourcetype>
          <d:collection/>
        </d:resourcetype>
      </d:prop>
      <d:status>HTTP/1.1 200 OK</d:status>
    </d:propstat>
  </d:response>
  <d:response>
    <d:href>/remote.php/dav/recognize/admin/faces/10/</d:href>
    <d:propstat>
      <d:prop>
        <d:resourcetype>
          <d:collection/>
        </d:resourcetype>
      </d:prop>
      <d:status>HTTP/1.1 200 OK</d:status>
    </d:propstat>
  </d:response>
</d:multistatus>
""";
  final results = await RecognizeFaceParser().parse(xml);
  expect(
    results,
    const [
      RecognizeFace(href: "/remote.php/dav/recognize/admin/faces/"),
      RecognizeFace(href: "/remote.php/dav/recognize/admin/faces/10/"),
    ],
  );
}

Future<void> _named() async {
  const xml = """
<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns" xmlns:nc="http://nextcloud.org/ns">
  <d:response>
    <d:href>/remote.php/dav/recognize/admin/faces/</d:href>
    <d:propstat>
      <d:prop>
        <d:resourcetype>
          <d:collection/>
        </d:resourcetype>
      </d:prop>
      <d:status>HTTP/1.1 200 OK</d:status>
    </d:propstat>
  </d:response>
  <d:response>
    <d:href>/remote.php/dav/recognize/admin/faces/lovely%20face/</d:href>
    <d:propstat>
      <d:prop>
        <d:resourcetype>
          <d:collection/>
        </d:resourcetype>
      </d:prop>
      <d:status>HTTP/1.1 200 OK</d:status>
    </d:propstat>
  </d:response>
</d:multistatus>
""";
  final results = await RecognizeFaceParser().parse(xml);
  expect(
    results,
    const [
      RecognizeFace(href: "/remote.php/dav/recognize/admin/faces/"),
      RecognizeFace(href: "/remote.php/dav/recognize/admin/faces/lovely face/"),
    ],
  );
}