|
@@ -4,6 +4,8 @@ import { UserEntity } from '@/server/modules/users/user.entity';
|
|
|
import { Role } from '@/server/modules/users/role.entity';
|
|
import { Role } from '@/server/modules/users/role.entity';
|
|
|
import { ActivityEntity, ActivityType } from '@/server/modules/activities/activity.entity';
|
|
import { ActivityEntity, ActivityType } from '@/server/modules/activities/activity.entity';
|
|
|
import { RouteEntity } from '@/server/modules/routes/route.entity';
|
|
import { RouteEntity } from '@/server/modules/routes/route.entity';
|
|
|
|
|
+import { LocationEntity } from '@/server/modules/locations/location.entity';
|
|
|
|
|
+import { AreaEntity } from '@/server/modules/areas/area.entity';
|
|
|
import { VehicleType } from '@/server/modules/routes/route.schema';
|
|
import { VehicleType } from '@/server/modules/routes/route.schema';
|
|
|
import { AppDataSource } from '@/server/data-source';
|
|
import { AppDataSource } from '@/server/data-source';
|
|
|
|
|
|
|
@@ -65,6 +67,41 @@ export class TestDataFactory {
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 创建测试区域数据
|
|
|
|
|
+ */
|
|
|
|
|
+ static createAreaData(overrides: Partial<AreaEntity> = {}): Partial<AreaEntity> {
|
|
|
|
|
+ const timestamp = Date.now();
|
|
|
|
|
+ return {
|
|
|
|
|
+ name: `测试区域_${timestamp}`,
|
|
|
|
|
+ code: `area_${timestamp}`,
|
|
|
|
|
+ level: 1,
|
|
|
|
|
+ parentId: null,
|
|
|
|
|
+ isDisabled: 0,
|
|
|
|
|
+ isDeleted: 0,
|
|
|
|
|
+ ...overrides
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 创建测试地点数据
|
|
|
|
|
+ */
|
|
|
|
|
+ static createLocationData(overrides: Partial<LocationEntity> = {}): Partial<LocationEntity> {
|
|
|
|
|
+ const timestamp = Date.now();
|
|
|
|
|
+ return {
|
|
|
|
|
+ name: `测试地点_${timestamp}`,
|
|
|
|
|
+ address: `测试地址_${timestamp}`,
|
|
|
|
|
+ provinceId: 0, // 将在创建时自动设置
|
|
|
|
|
+ cityId: 0, // 将在创建时自动设置
|
|
|
|
|
+ districtId: 0, // 将在创建时自动设置
|
|
|
|
|
+ latitude: 39.9042,
|
|
|
|
|
+ longitude: 116.4074,
|
|
|
|
|
+ isDisabled: 0,
|
|
|
|
|
+ isDeleted: 0,
|
|
|
|
|
+ ...overrides
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 在数据库中创建测试用户
|
|
* 在数据库中创建测试用户
|
|
|
*/
|
|
*/
|
|
@@ -87,6 +124,57 @@ export class TestDataFactory {
|
|
|
return await roleRepository.save(role);
|
|
return await roleRepository.save(role);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 在数据库中创建测试区域
|
|
|
|
|
+ */
|
|
|
|
|
+ static async createTestArea(dataSource: DataSource, overrides: Partial<AreaEntity> = {}): Promise<AreaEntity> {
|
|
|
|
|
+ const areaData = this.createAreaData(overrides);
|
|
|
|
|
+ const areaRepository = dataSource.getRepository(AreaEntity);
|
|
|
|
|
+
|
|
|
|
|
+ // 对于顶级区域(省/直辖市),parentId应该为null
|
|
|
|
|
+ if (areaData.level === 1) {
|
|
|
|
|
+ areaData.parentId = null;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 对于市级区域,确保有对应的省级区域
|
|
|
|
|
+ else if (areaData.level === 2 && !areaData.parentId) {
|
|
|
|
|
+ const province = await this.createTestArea(dataSource, { level: 1 });
|
|
|
|
|
+ areaData.parentId = province.id;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 对于区县级区域,确保有对应的市级区域
|
|
|
|
|
+ else if (areaData.level === 3 && !areaData.parentId) {
|
|
|
|
|
+ const city = await this.createTestArea(dataSource, { level: 2 });
|
|
|
|
|
+ areaData.parentId = city.id;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const area = areaRepository.create(areaData);
|
|
|
|
|
+ return await areaRepository.save(area);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 在数据库中创建测试地点
|
|
|
|
|
+ */
|
|
|
|
|
+ static async createTestLocation(dataSource: DataSource, overrides: Partial<LocationEntity> = {}): Promise<LocationEntity> {
|
|
|
|
|
+ const locationData = this.createLocationData(overrides);
|
|
|
|
|
+ const locationRepository = dataSource.getRepository(LocationEntity);
|
|
|
|
|
+
|
|
|
|
|
+ // 确保关联的区域存在 - 按层级顺序创建
|
|
|
|
|
+ if (!locationData.provinceId) {
|
|
|
|
|
+ const province = await this.createTestArea(dataSource, { level: 1 });
|
|
|
|
|
+ locationData.provinceId = province.id;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!locationData.cityId) {
|
|
|
|
|
+ const city = await this.createTestArea(dataSource, { level: 2, parentId: locationData.provinceId });
|
|
|
|
|
+ locationData.cityId = city.id;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!locationData.districtId) {
|
|
|
|
|
+ const district = await this.createTestArea(dataSource, { level: 3, parentId: locationData.cityId });
|
|
|
|
|
+ locationData.districtId = district.id;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const location = locationRepository.create(locationData);
|
|
|
|
|
+ return await locationRepository.save(location);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 创建测试活动数据
|
|
* 创建测试活动数据
|
|
|
*/
|
|
*/
|
|
@@ -101,7 +189,7 @@ export class TestDataFactory {
|
|
|
type: ActivityType.DEPARTURE,
|
|
type: ActivityType.DEPARTURE,
|
|
|
startDate: now,
|
|
startDate: now,
|
|
|
endDate: tomorrow,
|
|
endDate: tomorrow,
|
|
|
- venueLocationId: 1, // 默认举办地点ID
|
|
|
|
|
|
|
+ venueLocationId: 0, // 将在创建时自动设置
|
|
|
isDisabled: 0,
|
|
isDisabled: 0,
|
|
|
isDeleted: 0,
|
|
isDeleted: 0,
|
|
|
...overrides
|
|
...overrides
|
|
@@ -118,8 +206,8 @@ export class TestDataFactory {
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
name: `测试路线_${timestamp}`,
|
|
name: `测试路线_${timestamp}`,
|
|
|
- startLocationId: 1,
|
|
|
|
|
- endLocationId: 2,
|
|
|
|
|
|
|
+ startLocationId: 0, // 将在创建时自动设置
|
|
|
|
|
+ endLocationId: 0, // 将在创建时自动设置
|
|
|
pickupPoint: `上车点_${timestamp}`,
|
|
pickupPoint: `上车点_${timestamp}`,
|
|
|
dropoffPoint: `下车点_${timestamp}`,
|
|
dropoffPoint: `下车点_${timestamp}`,
|
|
|
departureTime: departureTime,
|
|
departureTime: departureTime,
|
|
@@ -140,6 +228,12 @@ export class TestDataFactory {
|
|
|
const activityData = this.createActivityData(overrides);
|
|
const activityData = this.createActivityData(overrides);
|
|
|
const activityRepository = dataSource.getRepository(ActivityEntity);
|
|
const activityRepository = dataSource.getRepository(ActivityEntity);
|
|
|
|
|
|
|
|
|
|
+ // 如果没有提供venueLocationId,自动创建一个测试地点
|
|
|
|
|
+ if (!activityData.venueLocationId || activityData.venueLocationId === 0) {
|
|
|
|
|
+ const testLocation = await this.createTestLocation(dataSource);
|
|
|
|
|
+ activityData.venueLocationId = testLocation.id;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
const activity = activityRepository.create(activityData);
|
|
const activity = activityRepository.create(activityData);
|
|
|
return await activityRepository.save(activity);
|
|
return await activityRepository.save(activity);
|
|
|
}
|
|
}
|
|
@@ -151,6 +245,18 @@ export class TestDataFactory {
|
|
|
const routeData = this.createRouteData(overrides);
|
|
const routeData = this.createRouteData(overrides);
|
|
|
const routeRepository = dataSource.getRepository(RouteEntity);
|
|
const routeRepository = dataSource.getRepository(RouteEntity);
|
|
|
|
|
|
|
|
|
|
+ // 如果没有提供startLocationId,自动创建一个测试地点
|
|
|
|
|
+ if (!routeData.startLocationId || routeData.startLocationId === 0) {
|
|
|
|
|
+ const startLocation = await this.createTestLocation(dataSource);
|
|
|
|
|
+ routeData.startLocationId = startLocation.id;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果没有提供endLocationId,自动创建一个测试地点
|
|
|
|
|
+ if (!routeData.endLocationId || routeData.endLocationId === 0) {
|
|
|
|
|
+ const endLocation = await this.createTestLocation(dataSource);
|
|
|
|
|
+ routeData.endLocationId = endLocation.id;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 如果没有提供activityId,自动创建一个测试活动
|
|
// 如果没有提供activityId,自动创建一个测试活动
|
|
|
if (!routeData.activityId) {
|
|
if (!routeData.activityId) {
|
|
|
const testActivity = await this.createTestActivity(dataSource);
|
|
const testActivity = await this.createTestActivity(dataSource);
|