#include "gtest/gtest.h"
#include "nsUrlClassifierDBService.h"

using namespace mozilla::safebrowsing;

void
TestResponseCode(const char* table, nsresult result)
{
  nsCString tableName(table);
  ASSERT_EQ(TablesToResponse(tableName), result);
}

TEST(UrlClassifierTable, ResponseCode)
{
  // malware URIs.
  TestResponseCode("goog-malware-shavar", NS_ERROR_MALWARE_URI);
  TestResponseCode("test-malware-simple", NS_ERROR_MALWARE_URI);
  TestResponseCode("goog-phish-shavar,test-malware-simple", NS_ERROR_MALWARE_URI);
  TestResponseCode("test-malware-simple,mozstd-track-digest256,mozplugin-block-digest256", NS_ERROR_MALWARE_URI);

  // phish URIs.
  TestResponseCode("goog-phish-shavar", NS_ERROR_PHISHING_URI);
  TestResponseCode("test-phish-simple", NS_ERROR_PHISHING_URI);
  TestResponseCode("test-phish-simple,mozplugin-block-digest256", NS_ERROR_PHISHING_URI);
  TestResponseCode("mozstd-track-digest256,test-phish-simple,goog-unwanted-shavar", NS_ERROR_PHISHING_URI);

  // unwanted URIs.
  TestResponseCode("goog-unwanted-shavar", NS_ERROR_UNWANTED_URI);
  TestResponseCode("test-unwanted-simple", NS_ERROR_UNWANTED_URI);
  TestResponseCode("mozplugin-unwanted-digest256,mozfull-track-digest256", NS_ERROR_UNWANTED_URI);
  TestResponseCode("test-block-simple,mozfull-track-digest256,test-unwanted-simple", NS_ERROR_UNWANTED_URI);

  // track URIs.
  TestResponseCode("test-track-simple", NS_ERROR_TRACKING_URI);
  TestResponseCode("mozstd-track-digest256", NS_ERROR_TRACKING_URI);
  TestResponseCode("test-block-simple,mozstd-track-digest256", NS_ERROR_TRACKING_URI);

  // block URIs
  TestResponseCode("test-block-simple", NS_ERROR_BLOCKED_URI);
  TestResponseCode("mozplugin-block-digest256", NS_ERROR_BLOCKED_URI);
  TestResponseCode("mozplugin2-block-digest256", NS_ERROR_BLOCKED_URI);

  TestResponseCode("test-trackwhite-simple", NS_OK);
  TestResponseCode("mozstd-trackwhite-digest256", NS_OK);
  TestResponseCode("goog-badbinurl-shavar", NS_OK);
  TestResponseCode("goog-downloadwhite-digest256", NS_OK);
}
