using System.Net;
using AsbCloudDb.Model;
using AsbCloudWebApi.IntegrationTests.Clients;
using Microsoft.EntityFrameworkCore;
using Xunit;

namespace AsbCloudWebApi.IntegrationTests.Controllers;

public class SetpointsControllerTest : BaseIntegrationTest
{
   private readonly ISetpointsClient client;

   public SetpointsControllerTest(WebAppFactoryFixture factory)
      : base(factory)
   {
      client = factory.GetAuthorizedHttpClient<ISetpointsClient>(string.Empty);
   }

   [Fact]
   public async Task GetByTelemetryUidAsync_returns_success()
   {
      //arrange
      var well = await dbContext.Wells
         .Include(w => w.Telemetry)
         .FirstAsync();
      
      var entity = new SetpointsRequest
      {
         IdWell = well.Id,
         UploadDate = DateTimeOffset.UtcNow, 
         ObsolescenceSec = 15,
         IdState = 1,
         IdAuthor = 1
      };
      
      var entry = dbContext.SetpointsRequests.Add(entity);
      await dbContext.SaveChangesAsync();
      entry.State = EntityState.Detached;

      //act
      var response = await client.GetByTelemetryUidAsync(well.Telemetry!.RemoteUid);
      
      //assert
      Assert.Equal(HttpStatusCode.OK, response.StatusCode);
      Assert.NotNull(response.Content);
      Assert.Single(response.Content);

      var setpoints = await dbContext.SetpointsRequests.ToArrayAsync();

      foreach (var setpoint in setpoints)
         Assert.Equal(2, setpoint.IdState);
   }
}