package tv.pluto;

import io.grpc.StatusRuntimeException;
import io.qameta.allure.Description;
import io.qameta.allure.TmsLink;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import tv.pluto.core.BaseTest;
import tv.pluto.grpc.users.UsersClient;
import tv.pluto.mongo.entities.users.User;
import tv.pluto.mongo.utils.UsersUtils;

public class UsersTestSuite extends BaseTest {
  private UsersClient usersClient;
  private UsersUtils usersUtils;

  @BeforeClass(alwaysRun = true)
  private void setUp() {
    usersClient = new UsersClient(grpcChannelManager.getChannel());
    usersUtils = new UsersUtils();
  }

  @Test
  @Description("Users happy path - GetById")
  @TmsLink("28501807")
  public void C28501807_TEST() {
    User userMangoDb = usersUtils.getRandomDocument();
    User userGrpc =
        usersUtils.mapGrpcObjectToPojo(
            usersClient.getById(userMangoDb.getId()).getUser(), User.class);

    Assert.assertEquals(userMangoDb, userGrpc);
  }

  @Test(
      expectedExceptions = StatusRuntimeException.class,
      expectedExceptionsMessageRegExp = "NOT_FOUND: User document for requested Id not found")
  @Description("Users not valid path - GetById")
  @TmsLink("28501808")
  public void C28501808_TEST() {
    usersClient.getById("9999999da741f3fad1ce9999");
  }

  @Test
  @Description("Users happy path - GetByEmail")
  @TmsLink("28501809")
  public void C28501809_TEST() {
    User userMangoDb = usersUtils.getRandomDocument();
    User userGrpc =
        usersUtils.mapGrpcObjectToPojo(
            usersClient.getByEmail(userMangoDb.getEmail().toLowerCase()).getUser(), User.class);

    Assert.assertEquals(userMangoDb, userGrpc);
  }

  @Test(
      expectedExceptions = StatusRuntimeException.class,
      expectedExceptionsMessageRegExp = "NOT_FOUND: User document for requested Email not found")
  @Description("Users not valid path - GetByEmail")
  @TmsLink("28501810")
  public void C28501810_TEST() {
    usersClient.getByEmail("blaTestEmail@gmail.com");
  }
}
