Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implemented GetChargerById for statistics feature on web development #22

Merged
merged 1 commit into from
Jan 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions SmartCharger.Business/Interfaces/IChargerService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ public interface IChargerService
{
Task<ChargerResponseDTO> CreateNewCharger(ChargerDTO charger);
Task<ChargerResponseDTO> GetAllChargers(int page, int pageSize, string search);
Task<ChargerResponseDTO> GetChargerById(int chargerId);
Task<ChargerResponseDTO> UpdateCharger(int chargerId, ChargerDTO charger);
Task<ChargerResponseDTO> DeleteCharger(int chargerId);

Expand Down
33 changes: 33 additions & 0 deletions SmartCharger.Business/Services/ChargerService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -295,5 +295,38 @@ private void UpdateCharger(Charger chargerEntity, ChargerDTO charger)
chargerEntity.Latitude = charger.Latitude;
chargerEntity.Longitude = charger.Longitude;
}

public async Task<ChargerResponseDTO> GetChargerById(int chargerId)
{
try
{

var charger = await _context.Chargers.SingleOrDefaultAsync(c => c.Id == chargerId);
if (charger == null)
{
return new ChargerResponseDTO
{
Success = false,
Message = "Charger with that ID doesn't exist.",
Charger = null
};
}
return new ChargerResponseDTO
{
Success = true,
Message = $"Charger exists.",
Charger = MapChargerToDTO(charger)
};
}
catch (Exception ex)
{
return new ChargerResponseDTO
{
Success = false,
Message = "An error occurred: " + ex.Message,
Charger = null
};
}
}
}
}
66 changes: 66 additions & 0 deletions SmartCharger.Test/ControllerTests/ChargerControllerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -497,5 +497,71 @@ public async Task UpdateCharger_WhenChargersNameInvalid_ShouldReturnBadRequest()
Assert.Equal("Name of the charger cannot be empty.", response.Error);

}

[Fact]
public async Task GetChargerById_WhenChargerServiceReturnsCharger_ShouldReturnOk()
{
// Arrange
var chargerServiceMock = new Mock<IChargerService>();
chargerServiceMock.Setup(service => service.GetChargerById(It.IsAny<int>())).ReturnsAsync(new ChargerResponseDTO
{
Success = true,
Message = "Charger exists.",
Charger = new ChargerDTO
{
Id = 1,
Name = "Charger 1",
Latitude = 55,
Longitude = 50,
}
});

var controller = new ChargerController(chargerServiceMock.Object);

// Act
var actionResult = await controller.GetChargerById(1);

// Assert
Assert.NotNull(actionResult);
var result = actionResult.Result as ObjectResult;
Assert.Equal(200, result.StatusCode);
var response = result.Value as ChargerResponseDTO;
Assert.NotNull(response);
Assert.True(response.Success);
Assert.Equal("Charger exists.", response.Message);
Assert.Equal(1, response.Charger.Id);
Assert.Equal(55, response.Charger.Latitude);
Assert.Equal(50, response.Charger.Longitude);
Assert.Equal("Charger 1", response.Charger.Name);
}

[Fact]
public async Task GetChargerById_WhenChargerServiceReturnsNoCharger_ShouldReturnBadRequest()
{
// Arrange
var chargerServiceMock = new Mock<IChargerService>();
chargerServiceMock.Setup(service => service.GetChargerById(It.IsAny<int>())).ReturnsAsync(new ChargerResponseDTO
{
Success = false,
Message = "Charger with that ID doesn't exist.",
Charger = null
});

var controller = new ChargerController(chargerServiceMock.Object);

// Act
var actionResult = await controller.GetChargerById(2);

// Assert
Assert.NotNull(actionResult);
var result = actionResult.Result as ObjectResult;
Assert.Equal(400, result.StatusCode);
var response = result.Value as ChargerResponseDTO;
Assert.NotNull(response);
Assert.False(response.Success);
Assert.Equal("Charger with that ID doesn't exist.", response.Message);
Assert.Null(response.Charger);
}

}
}
61 changes: 61 additions & 0 deletions SmartCharger.Test/ServicesTests/ChargerServiceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using System.Text;
using System.Threading.Channels;
using System.Threading.Tasks;
using System.Xml.Linq;
using static System.Runtime.InteropServices.JavaScript.JSType;

namespace SmartCharger.Test.ServicesTests
Expand Down Expand Up @@ -427,6 +428,66 @@ public async Task DeleteCharger_WhenChargerDoesntExist_ShouldReturnFailure()

}

[Fact]
public async Task GetChargerById_WhenChargerExists_ShouldReturnCharger()
{
// Arrange
var options = new DbContextOptionsBuilder<SmartChargerContext>()
.UseInMemoryDatabase(databaseName: "ChargerServiceDatabaseGetById1")
.Options;

using (var context = new SmartChargerContext(options))
{
SetupChargerDatabase(context);
}

using (var context = new SmartChargerContext(options))
{
var chargerService = new ChargerService(context);

// Act
ChargerResponseDTO result = await chargerService.GetChargerById(1);

// Assert
Assert.True(result.Success);
Assert.Equal("Charger exists.", result.Message);
Assert.NotNull(result.Charger);
Assert.Equal("Charger 1", result.Charger.Name);
Assert.Equal(1, result.Charger.Id);
Assert.Equal("Charger 1", result.Charger.Name);
Assert.Equal(40.7128, result.Charger.Latitude);
Assert.Equal(-74.0060, result.Charger.Longitude);
}
}

[Fact]
public async Task GetChargerById_WhenChargerDoesNotExist_ShouldReturnFailure()
{
// Arrange
var options = new DbContextOptionsBuilder<SmartChargerContext>()
.UseInMemoryDatabase(databaseName: "ChargerServiceDatabaseGetById")
.Options;

using (var context = new SmartChargerContext(options))
{
SetupChargerDatabase(context);
}

using (var context = new SmartChargerContext(options))
{
var chargerService = new ChargerService(context);

// Act
ChargerResponseDTO result = await chargerService.GetChargerById(3);

// Assert
Assert.False(result.Success);
Assert.Equal("Charger with that ID doesn't exist.", result.Message);
Assert.Null(result.Charger);
}
}


private void SetupChargerDatabase(SmartChargerContext context)
{
var chargers = new List<Charger>
Expand Down
13 changes: 13 additions & 0 deletions SmartCharger/Controllers/ChargerController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,5 +70,18 @@ public async Task<IActionResult> UpdateCharger(int chargerId, [FromBody]ChargerD

return Ok(response);
}

[Authorize(Policy = "Admin")]
[HttpGet("admin/chargers/{chargerId}")]
public async Task<ActionResult<IEnumerable<ChargerResponseDTO>>> GetChargerById(int chargerId)
{
ChargerResponseDTO response = await _chargerService.GetChargerById(chargerId);
if (response.Success == false)
{
return BadRequest(response);
}

return Ok(response);
}
}
}
2 changes: 1 addition & 1 deletion SmartCharger/appsettings.Development.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
}
},
"ConnectionStrings": {
"Connection": "Server=dumbo.db.elephantsql.com;Username=oupptaev;Password=y8ezc0d592OdRc-vFXnyFfsiLk3rebQa;Database=oupptaev;"
"connection": "Server=localhost;Port=5432;Database=postgres;User Id=postgres;Password=1234;"
},
"AllowedHosts": "*",
"JWT": {
Expand Down
2 changes: 1 addition & 1 deletion SmartCharger/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
}
},
"ConnectionStrings": {
"Connection": "Server=dumbo.db.elephantsql.com;Username=oupptaev;Password=y8ezc0d592OdRc-vFXnyFfsiLk3rebQa;Database=oupptaev;",
"connection": "Server=localhost;Port=5432;Database=postgres;User Id=postgres;Password=1234;"
},
"AllowedHosts": "*",
"JWT": {
Expand Down