@fboes/aerofly-custom-missions 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fboes/aerofly-custom-missions",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "Builder for Aerofly FS4 Custom Missions Files",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
package/src/index.test.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import {
2
+ AeroflyConfigFileSet,
2
3
  AeroflyMissionsList,
3
4
  AeroflyMission,
4
5
  AeroflyMissionConditions,
@@ -9,7 +10,7 @@ import {
9
10
  } from "./index.js";
10
11
  import { strict as assert } from "node:assert";
11
12
 
12
- const validityCheck = (aeroflyString: string): void => {
13
+ const assertValidAeroflyStructure = (aeroflyString: string): void => {
13
14
  const openingBrackets = aeroflyString.match(/</g);
14
15
  const closingBrackets = aeroflyString.match(/>/g);
15
16
  const openingBrackets2 = aeroflyString.match(/\[/g);
@@ -19,9 +20,51 @@ const validityCheck = (aeroflyString: string): void => {
19
20
  assert.strictEqual(openingBrackets2?.length, closingBrackets2?.length, "Number of [] matches");
20
21
  };
21
22
 
23
+ const assertIncludes = (string: string, includes: string): void => {
24
+ assert.ok(string.includes(includes), `Includes "${includes}"`);
25
+ };
26
+
27
+ {
28
+ const file = new AeroflyConfigFileSet(0, "file", "");
29
+ file.pushRaw(
30
+ new AeroflyConfigFileSet(1, "tmmissions_list", "")
31
+ .pushRaw(
32
+ new AeroflyConfigFileSet(2, "list_tmmission_definition", "missions")
33
+ .pushRaw(
34
+ new AeroflyConfigFileSet(3, "tmmission_definition", "mission")
35
+ .push("string8", "title", "KCCR #1: Concord / Buchanan Field")
36
+ .push("float64", "origin_alt", 1066.799965862401, "3500 ft MSL")
37
+ .toString(),
38
+ )
39
+ .pushRaw(new AeroflyConfigFileSet(3, "tmmission_definition", "mission").toString())
40
+ .toString(),
41
+ )
42
+ .toString(),
43
+ );
44
+ assertValidAeroflyStructure(file.toString());
45
+ console.log("✅ AeroflyMission test successful");
46
+ }
47
+
22
48
  {
23
- const mission = new AeroflyMission("Title");
49
+ const mission = new AeroflyMission("Title", {
50
+ origin: {
51
+ icao: "XXXX",
52
+ longitude: 0,
53
+ latitude: 0,
54
+ dir: 0,
55
+ alt: 0,
56
+ },
57
+ destination: {
58
+ icao: "XXXX",
59
+ longitude: 0,
60
+ latitude: 0,
61
+ dir: 0,
62
+ alt: 0,
63
+ },
64
+ });
24
65
  assert.deepStrictEqual(mission.title, "Title");
66
+ assertValidAeroflyStructure(mission.toString());
67
+ //console.log(mission.toString());
25
68
  console.log("✅ AeroflyMission test successful");
26
69
  }
27
70
 
@@ -33,7 +76,7 @@ const validityCheck = (aeroflyString: string): void => {
33
76
  conditions.visibility_sm = 10;
34
77
  assert.notDeepStrictEqual(conditions.visibility, 10);
35
78
  assert.deepStrictEqual(Math.round(conditions.visibility_sm), 10);
36
- validityCheck(conditions.toString());
79
+ assertValidAeroflyStructure(conditions.toString());
37
80
  console.log("✅ AeroflyMissionConditions test successful");
38
81
  }
39
82
 
@@ -42,7 +85,7 @@ const validityCheck = (aeroflyString: string): void => {
42
85
  visibility: 15_000,
43
86
  });
44
87
  assert.deepStrictEqual(conditions.visibility, 15_000);
45
- validityCheck(conditions.toString());
88
+ assertValidAeroflyStructure(conditions.toString());
46
89
  console.log("✅ AeroflyMissionConditions test successful");
47
90
  }
48
91
 
@@ -52,7 +95,7 @@ const validityCheck = (aeroflyString: string): void => {
52
95
  });
53
96
  assert.notDeepStrictEqual(conditions.visibility, 10);
54
97
  assert.deepStrictEqual(Math.round(conditions.visibility_sm), 10);
55
- validityCheck(conditions.toString());
98
+ assertValidAeroflyStructure(conditions.toString());
56
99
  console.log("✅ AeroflyMissionConditions test successful");
57
100
  }
58
101
 
@@ -60,7 +103,12 @@ const validityCheck = (aeroflyString: string): void => {
60
103
  const cloud = new AeroflyMissionConditionsCloud(0, 0);
61
104
  assert.deepStrictEqual(cloud.cover, 0);
62
105
  assert.deepStrictEqual(cloud.base, 0);
63
- validityCheck(cloud.toString());
106
+ assertValidAeroflyStructure(cloud.toString());
107
+ assertValidAeroflyStructure(cloud.toString(0));
108
+ assertValidAeroflyStructure(cloud.toString(1));
109
+ assertValidAeroflyStructure(cloud.toString(2));
110
+ assertValidAeroflyStructure(cloud.toString(3));
111
+
64
112
  console.log("✅ AeroflyMissionConditionsCloud test successful");
65
113
  }
66
114
 
@@ -72,7 +120,7 @@ const validityCheck = (aeroflyString: string): void => {
72
120
  cloud.base_feet = 1000;
73
121
  assert.notDeepStrictEqual(cloud.base, 1000);
74
122
  assert.deepStrictEqual(Math.round(cloud.base_feet), 1000);
75
- validityCheck(cloud.toString());
123
+ assertValidAeroflyStructure(cloud.toString());
76
124
  console.log("✅ AeroflyMissionConditionsCloud test successful");
77
125
  }
78
126
 
@@ -81,7 +129,7 @@ const validityCheck = (aeroflyString: string): void => {
81
129
  assert.deepStrictEqual(localizedText.language, "de");
82
130
  assert.deepStrictEqual(localizedText.title, "Test");
83
131
  assert.deepStrictEqual(localizedText.description, "Test2");
84
- validityCheck(localizedText.toString());
132
+ assertValidAeroflyStructure(localizedText.toString());
85
133
  console.log("✅ AeroflyLocalizedText test successful");
86
134
  }
87
135
 
@@ -91,10 +139,32 @@ const validityCheck = (aeroflyString: string): void => {
91
139
  assert.deepStrictEqual(targetPlane.latitude, 1);
92
140
  assert.deepStrictEqual(targetPlane.dir, 2);
93
141
  assert.deepStrictEqual(targetPlane.name, "Test2");
94
- validityCheck(targetPlane.toString());
142
+ assertValidAeroflyStructure(targetPlane.toString());
95
143
  console.log("✅ AeroflyMissionTargetPlane test successful");
96
144
  }
97
145
 
146
+ {
147
+ const checkpoint = new AeroflyMissionCheckpoint("TEST", "waypoint", 15, 20);
148
+ let checkpointString = checkpoint.toString();
149
+
150
+ assertIncludes(checkpointString, "[type]");
151
+ assertIncludes(checkpointString, "[name]");
152
+ assertIncludes(checkpointString, "[lon_lat]");
153
+ assertIncludes(checkpointString, "15 20");
154
+ assertIncludes(checkpointString, "[altitude]");
155
+ assert.ok(!checkpointString.includes("[fly_over]"));
156
+ assert.ok(!checkpointString.includes("[alt_cst]"));
157
+
158
+ checkpoint.altitudeConstraint = false;
159
+ checkpoint.flyOver = false;
160
+ checkpointString = checkpoint.toString();
161
+
162
+ assertIncludes(checkpointString, "[fly_over]");
163
+ assertIncludes(checkpointString, "[alt_cst]");
164
+
165
+ console.log("✅ AeroflyMissionCheckpoint test successful");
166
+ }
167
+
98
168
  {
99
169
  const conditions = new AeroflyMissionConditions({
100
170
  time: new Date(Date.UTC(2024, 5, 14, 13, 15, 38)),
@@ -175,25 +245,26 @@ const validityCheck = (aeroflyString: string): void => {
175
245
 
176
246
  let missionListString = missionList.toString();
177
247
 
178
- assert.ok(missionListString.includes("[origin]"));
179
- assert.ok(missionListString.includes("[tmmission_definition]"));
180
- assert.ok(missionListString.includes("[list_tmmission_checkpoint]"));
181
- assert.ok(missionListString.includes("[tmmission_checkpoint]"));
182
- assert.ok(missionListString.includes("[departure_runway]"));
183
- assert.ok(missionListString.includes("[cloud_cover]"));
184
- assert.ok(missionListString.includes("[cirrus_cover]"));
185
- assert.ok(missionListString.includes("[tmmission_checkpoint][element][0]"));
186
- assert.ok(missionListString.includes("[tmmission_checkpoint][element][1]"));
187
- assert.ok(missionListString.includes("[tmmission_checkpoint][element][2]"));
188
- assert.ok(missionListString.includes("[tmmission_checkpoint][element][3]"));
189
- assert.ok(missionListString.includes("<[float64][length][844.2959729825288]>"));
248
+ assertIncludes(missionListString, "[origin]");
249
+ assertIncludes(missionListString, "[tmmission_definition]");
250
+ assertIncludes(missionListString, "[list_tmmission_checkpoint]");
251
+ assertIncludes(missionListString, "[tmmission_checkpoint]");
252
+ assertIncludes(missionListString, "[departure_runway]");
253
+ assertIncludes(missionListString, "[cloud_cover]");
254
+ assertIncludes(missionListString, "[cirrus_cover]");
255
+ assertIncludes(missionListString, "[tmmission_checkpoint][element][0]");
256
+ assertIncludes(missionListString, "[tmmission_checkpoint][element][1]");
257
+ assertIncludes(missionListString, "[tmmission_checkpoint][element][2]");
258
+ assertIncludes(missionListString, "[tmmission_checkpoint][element][3]");
259
+ assertIncludes(missionListString, "<[float64][length][844.2959729825288]>");
190
260
  assert.ok(!missionListString.includes("[tags]"));
191
261
  assert.ok(!missionListString.includes("[difficulty]"));
192
262
  assert.ok(!missionListString.includes("[is_featured]"));
193
- assert.ok(!missionListString.includes("[tmmission_definition_localized]"), "has `tmmission_definition_localized`");
263
+ assert.ok(!missionListString.includes("[tmmission_definition_localized]"));
194
264
  assert.ok(!missionListString.includes("[distance]"));
195
265
  assert.ok(!missionListString.includes("[duration]"));
196
- validityCheck(missionListString);
266
+ assert.ok(!missionListString.includes("[alt_cst]"));
267
+ assertValidAeroflyStructure(missionListString);
197
268
 
198
269
  //console.log(missionListString);
199
270
 
@@ -205,21 +276,25 @@ const validityCheck = (aeroflyString: string): void => {
205
276
  mission.tags.push("approach");
206
277
  mission.tags.push("pattern");
207
278
  mission.finish = new AeroflyMissionTargetPlane(0, 1, 2);
279
+ mission.tutorialName = "c172";
280
+ mission.isScheduled = true;
208
281
  missionListString = missionList.toString();
209
282
 
210
- assert.ok(missionListString.includes("[tags]"));
211
- assert.ok(missionListString.includes("[difficulty]"));
212
- assert.ok(missionListString.includes("[is_featured]"));
213
- assert.ok(missionListString.includes("true"));
214
- assert.ok(missionListString.includes("[tmmission_definition_localized]"), "has `tmmission_definition_localized`");
215
- assert.ok(missionListString.includes("Landeübung"));
216
- assert.ok(missionListString.includes("[distance]"));
217
- assert.ok(missionListString.includes("[duration]"));
218
- assert.ok(missionListString.includes("[finish]"));
219
- validityCheck(missionListString);
283
+ assertIncludes(missionListString, "[tags]");
284
+ assertIncludes(missionListString, "[difficulty]");
285
+ assertIncludes(missionListString, "[is_featured]");
286
+ assertIncludes(missionListString, "true");
287
+ assertIncludes(missionListString, "[tmmission_definition_localized]");
288
+ assertIncludes(missionListString, "Landeübung");
289
+ assertIncludes(missionListString, "[distance]");
290
+ assertIncludes(missionListString, "[duration]");
291
+ assertIncludes(missionListString, "[finish]");
292
+ assertIncludes(missionListString, "[tutorial_name]");
293
+ assertIncludes(missionListString, "[is_scheduled]");
294
+ assertValidAeroflyStructure(missionListString);
220
295
 
221
296
  //console.dir(missionList.missions[0], { depth: null });
222
- console.log(missionListString);
297
+ //console.log(missionListString);
223
298
 
224
299
  console.log("✅ AeroflyMissionsList test successful");
225
300
  }