diff --git a/BusinessLayer.Tests/Services/LocationServiceTests.cs b/BusinessLayer.Tests/Services/LocationServiceTests.cs
new file mode 100644
index 0000000000000000000000000000000000000000..6fc29f9d9ccdd595c4a6ad224b17828005b38735
--- /dev/null
+++ b/BusinessLayer.Tests/Services/LocationServiceTests.cs
@@ -0,0 +1,276 @@
+using Bogus.DataSets;
+using BusinessLayer.DTOs.Location;
+using BusinessLayer.Services.LocationService;
+using BusinessLayer.Utils.Filters;
+using BusinessLayer.Utils.Ordering;
+using DAL.Constants;
+using DAL.Data;
+using Microsoft.EntityFrameworkCore;
+using System.Diagnostics.Metrics;
+using System.Reflection.Emit;
+using System.Runtime.InteropServices;
+using TestUtilities.Mocks;
+
+namespace BusinessLayer.Tests.Services
+{
+    public class LocationServiceTests
+    {
+        private DbContextOptions<RestaurantDBContext> _dbContextOptions;
+        private RestaurantDBContext _dbContext;
+        private LocationService _service;
+
+        public LocationServiceTests()
+        {
+            _dbContextOptions = MockedDbContext.CreateInMemoryContextOptions();
+            _dbContext = MockedDbContext.CreateContext(_dbContextOptions);
+            _service = new LocationService(_dbContext);
+        }
+
+        [Fact]
+        public async Task GetLocations_IdMatch()
+        {
+            // Arrange
+            // Locations are identified by their corresponding restaurants.
+            var ids = new Guid[] { SeedingValues.Restaurant1Id, SeedingValues.Restaurant2Id };
+
+            // Act
+            var result = await _service.GetLocationsAsync(new Utils.Filters.LocationFilter(),
+                LocationOrdering.CreatedAtDesc, 0, 0, ids);
+
+            // Assert
+            Assert.Equal(ids.Length, result.Count);
+            Assert.All(ids, id => Assert.Contains(result, l => l.RestaurantId == id));
+        }
+
+        [Fact]
+        public async Task GetLocations_IdMatch_NotExists()
+        {
+            // Arrange
+            // Locations are identified by their corresponding restaurants.
+            var ids = new Guid[] { Guid.NewGuid(), Guid.NewGuid() };
+
+            // Act
+            var result = await _service.GetLocationsAsync(new Utils.Filters.LocationFilter(),
+                LocationOrdering.CreatedAtDesc, 0, 0, ids);
+
+            // Assert
+            Assert.Empty(result);
+        }
+
+
+        [Theory]
+        [InlineData(LocationOrdering.CityDesc)]
+        [InlineData(LocationOrdering.City)]
+        [InlineData(LocationOrdering.CountryDesc)]
+        [InlineData(LocationOrdering.Country)]
+        [InlineData(LocationOrdering.CreatedAtDesc)]
+        public async Task GetLocations_OrderBy(LocationOrdering ordering)
+        {
+            // Arrange
+            // Whoops, nothing to arrange here! ¯\_(ツ)_/¯
+
+            // Act
+            var result = await _service.GetLocationsAsync(new LocationFilter(), ordering);
+
+            // Assert
+            Assert.NotEmpty(result);
+            var first = result.First();
+            foreach (var second in result.Skip(1))
+            {
+                CheckOrdering(ordering, first, second);
+            }
+        }
+
+        private static void CheckOrdering(LocationOrdering ordering, LocationDto first, LocationDto second)
+        {
+            switch (ordering)
+            {
+                case LocationOrdering.City:
+                    Assert.True(first.City.CompareTo(second.City) <= 0);
+                    return;
+                case LocationOrdering.CityDesc:
+                    Assert.True(first.City.CompareTo(second.City) >= 0);
+                    return;
+                case LocationOrdering.Country:
+                    Assert.True(first.Country.CompareTo(second.Country) <= 0);
+                    return;
+                case LocationOrdering.CountryDesc:
+                    Assert.True(first.Country.CompareTo(second.Country) >= 0);
+                    return;
+                case LocationOrdering.CreatedAtDesc:
+                    Assert.True(first.CreatedAt >= second.CreatedAt);
+                    return;
+            }
+        }
+
+        [Fact]
+        public async Task GetLocations_Filter_Country()
+        {
+            // Arrange
+            var filterValue = "Fake";
+
+            var filter = new LocationFilter()
+            {
+                CountryLike = filterValue
+            };
+
+            // Act
+            var result = await _service.GetLocationsAsync(filter, LocationOrdering.CreatedAtDesc);
+
+            // Assert
+            Assert.NotEmpty(result);
+            result.ForEach(r => Assert.Contains(filterValue, r.Country));
+        }
+
+        [Fact]
+        public async Task GetLocations_Filter_City()
+        {
+            // Arrange
+            var filterValue = "no";
+
+            var filter = new LocationFilter()
+            {
+                CityLike = filterValue
+            };
+
+            // Act
+            var result = await _service.GetLocationsAsync(filter, LocationOrdering.CreatedAtDesc);
+
+            // Assert
+            Assert.NotEmpty(result);
+            result.ForEach(r => Assert.Contains(filterValue, r.City));
+        }
+
+        [Fact]
+        public async Task GetLocations_Filter_Address()
+        {
+            // Arrange
+            var filterValue = "Ĺ tef";
+
+            var filter = new LocationFilter()
+            {
+                AddressLike = filterValue
+            };
+
+            // Act
+            var result = await _service.GetLocationsAsync(filter, LocationOrdering.CreatedAtDesc);
+
+            // Assert
+            Assert.NotEmpty(result);
+            result.ForEach(r => Assert.Contains(filterValue, r.Address));
+        }
+
+        [Fact]
+        public async Task GetLocations_Filter_Zipcode()
+        {
+            // Arrange
+            var filterValue = "60201";
+
+            var filter = new LocationFilter()
+            {
+                Zipcode = filterValue
+            };
+
+            // Act
+            var result = await _service.GetLocationsAsync(filter, LocationOrdering.CreatedAtDesc);
+
+            // Assert
+            Assert.NotEmpty(result);
+            result.ForEach(r => Assert.Equal(filterValue, r.Zipcode));
+        }
+
+        [Fact]
+        public async Task GetLocation_Exists()
+        {
+            // Arrange
+            var id = SeedingValues.Restaurant1Id;
+
+            // Act
+            var result = await _service.GetLocationAsync(id);
+
+            // Assert
+            Assert.NotNull(result);
+            Assert.Equal(id, result.RestaurantId);
+        }
+
+        [Fact]
+        public async Task GetLocation_NotExists()
+        {
+            // Arrange
+            var id = Guid.NewGuid();
+
+            // Act
+            var result = await _service.GetLocationAsync(id);
+
+            // Assert
+            Assert.Null(result);
+        }
+
+        [Theory]
+        [InlineData("Redania", null, null, null)]
+        [InlineData("Redania", "Oxenfurt", null, null)]
+        [InlineData("Redania", "Oxenfurt", "Random 15", null)]
+        [InlineData("Redania", "Oxenfurt", "Random 15", "43212")]
+        [InlineData("Redania", "Oxenfurt", null, "43212")]
+        [InlineData("Redania", null, "Random 15", "43212")]
+        [InlineData(null, null, "Random 15", "43212")]
+        [InlineData("Redania", null, null, "43212")]
+        [InlineData(null, "Oxenfurt", "Random 15", "43212")]
+        public async Task UpdateLocation_Valid(string? country, string? city, 
+            string? address, string? zipcode)
+        {
+            // Arrange
+            var id = SeedingValues.Restaurant1Id;
+            var data = new LocationUpdateDto
+            {
+                Country = country,
+                City = city,
+                Address = address,
+                Zipcode = zipcode
+            };
+
+            // Act
+            var result = await _service.UpdateLocationAsync(id, data);
+
+            // Assert
+            Assert.NotNull(result);
+            Assert.True(result.CreatedAt < result.UpdatedAt);
+            
+            if (country is not null)
+            {
+                Assert.Equal(country, result.Country);
+            }
+
+            if (city is not null)
+            {
+                Assert.Equal(city, result.City);
+            }
+
+            if (address is not null)
+            {
+                Assert.Equal(address, result.Address);
+            }
+
+            if (zipcode is not null)
+            {
+                Assert.Equal(zipcode, result.Zipcode);
+            }
+        }
+
+        [Fact]
+        public async Task UpdateLocation_NotExists()
+        {
+            var id = Guid.NewGuid();
+            var data = new LocationUpdateDto
+            {
+                Country = "won'tMatter",
+            };
+
+            // Act
+            var result = await _service.UpdateLocationAsync(id, data);
+
+            // Assert
+            Assert.Null(result);
+        }
+    }
+}
diff --git a/BusinessLayer/DTOs/Location/LocationDto.cs b/BusinessLayer/DTOs/Location/LocationDto.cs
index e718660e98e08c52ffd002bd16b8831c9b862a96..7fb9d3512a2d89b646b6ad4272ceeb94d2e079a6 100644
--- a/BusinessLayer/DTOs/Location/LocationDto.cs
+++ b/BusinessLayer/DTOs/Location/LocationDto.cs
@@ -6,7 +6,7 @@ public record LocationDto
     public required string Country { get; set; }
     public required string City { get; set; }
     public required string Address { get; set; }
-    public string? ZipCode { get; set; }
+    public string? Zipcode { get; set; }
     public DateTime CreatedAt { get; set; }
     public DateTime UpdatedAt { get; set; }
     public DateTime? DeletedAt { get; set; }
diff --git a/BusinessLayer/Services/LocationService/ILocationService.cs b/BusinessLayer/Services/LocationService/ILocationService.cs
index c62b32379413620ed861b9d0a322a82cd41f636d..a15ab6f3636fd6256a80b9a3f7b519f60e02f710 100644
--- a/BusinessLayer/Services/LocationService/ILocationService.cs
+++ b/BusinessLayer/Services/LocationService/ILocationService.cs
@@ -15,6 +15,7 @@ namespace BusinessLayer.Services.LocationService
         public Task<LocationDto?> GetLocationAsync(Guid id);
         public Task<LocationDto?> UpdateLocationAsync(
             Guid id,
-            LocationUpdateDto restaurant);
+            LocationUpdateDto restaurant,
+            bool save = true);
     }
 }
diff --git a/BusinessLayer/Services/LocationService/LocationService.cs b/BusinessLayer/Services/LocationService/LocationService.cs
index 278b52672b9fdc9278c762ceac80526d26853a2b..c91bb48ee14187b471269f6bc0149033b94b3c09 100644
--- a/BusinessLayer/Services/LocationService/LocationService.cs
+++ b/BusinessLayer/Services/LocationService/LocationService.cs
@@ -22,8 +22,8 @@ namespace BusinessLayer.Services.LocationService
             return await _dbContext.Locations
                 .Include(l => l.Restaurant)
                 .Where(filter.ComposeFilterFunc(ids))
-                .ApplyPagination(limit, offset)
                 .ApplyOrdering(orderBy)
+                .ApplyPagination(limit, offset)
                 .Select(l => l.Adapt<LocationDto>()).ToListAsync();
         }
 
@@ -41,7 +41,8 @@ namespace BusinessLayer.Services.LocationService
 
         public async Task<LocationDto?> UpdateLocationAsync(
             Guid id,
-            LocationUpdateDto data)
+            LocationUpdateDto data,
+            bool save = true)
         {
             var location = await _dbContext.Locations.FindAsync(id);
 
@@ -57,7 +58,7 @@ namespace BusinessLayer.Services.LocationService
             location.UpdatedAt = DateTime.UtcNow;
 
             _dbContext.Locations.Update(location);
-            await _dbContext.SaveChangesAsync();
+            await SaveAsync(save);
 
             return location.Adapt<LocationDto>();
         }
diff --git a/DAL/Constants/SeedingValues.cs b/DAL/Constants/SeedingValues.cs
index 5f9f5a9514ba71bc2d726bc7ad1d67f6857c0ed0..f73ee97054bec3a14881a4bbaaf6bae2f339b6f5 100644
--- a/DAL/Constants/SeedingValues.cs
+++ b/DAL/Constants/SeedingValues.cs
@@ -33,9 +33,5 @@
         // Event Comment IDs
         public static readonly Guid EventComment1Id = new("88a4b4d4-b74d-40c5-823e-e708f15664d3");
         public static readonly Guid EventComment2Id = new("e0e27f5b-bd6f-47d9-b5fa-5b7e7e77d462");
-
-        // Location IDs
-        public static readonly Guid Location1Id = new("879b11c9-cf58-4fb4-bb31-08a930add99c");
-        public static readonly Guid Location2Id = new("2128e797-4ba9-443b-971a-62dbcca081e0");
     }
 }
diff --git a/TestUtilities/FakeData/FakeDataInitializer.cs b/TestUtilities/FakeData/FakeDataInitializer.cs
index 7c057183e2140979a79495585f01bd246cce16f5..dd5a1525c2b2c01fb768eaa2e7da8fcdaded6f4b 100644
--- a/TestUtilities/FakeData/FakeDataInitializer.cs
+++ b/TestUtilities/FakeData/FakeDataInitializer.cs
@@ -294,10 +294,10 @@ namespace TestUtilities.FakeData
             new Location
             {
                 RestaurantId = SeedingValues.Restaurant2Id,
-                Country = "Czech Republic",
-                City = "Brno",
+                Country = "Fake Republic",
+                City = "Bryes",
                 Address = "Štefánikova 39",
-                Zipcode = "60200",
+                Zipcode = "60201",
                 CreatedAt = new DateTime(2024, 10, 01, 12, 1, 0),
                 UpdatedAt = new DateTime(2024, 10, 01, 12, 1, 0)
             }