fix: semster boosting

This commit is contained in:
Rainer Killinger
2023-03-07 13:20:57 +01:00
parent 3e490aeeb9
commit 515a6eeea5
2 changed files with 32 additions and 24 deletions

View File

@@ -1,5 +1,3 @@
// tslint:disable:no-default-export
// tslint:disable:no-magic-numbers
import { import {
SCAboutPageContentType, SCAboutPageContentType,
SCConfigFile, SCConfigFile,
@@ -13,21 +11,31 @@ import {readFileSync} from 'fs';
import path from 'path'; import path from 'path';
/** /**
* Evaluates if a number is within the given range * Generates a range of numbers that represent consecutive calendric months
* *
* @param number_ The number that should be checked * @param startMonth The month to start with (inclusive)
* @param range Array of two numbers representing a range (inclusive interval) * @param endMonth The month to end with (inclusive)
*/ */
export function inRangeInclusive(number_: number, range: number[]): boolean { export function yearSlice(startMonth: number, endMonth: number) {
return number_ >= range[0] && number_ <= range[1]; let months = [...Array.from({length: 13}).keys()].slice(1);
months = [...months, ...months];
if (!months.includes(startMonth) || !months.includes(endMonth)) {
throw new Error(`Given months not part of a year! Check ${startMonth} or ${endMonth}!`);
}
const startIndex = months.indexOf(startMonth);
const endIndex =
months.indexOf(endMonth) <= startIndex ? months.lastIndexOf(endMonth) : months.indexOf(endMonth);
return months.slice(startIndex, endIndex + 1);
} }
const sommerRange = [4, 1]; const sommerRange = yearSlice(3, 8);
const winterRange = [10, 1]; const winterRange = yearSlice(9, 2);
const month = new Date().getMonth(); const month = new Date().getMonth();
const year = new Date().getFullYear(); const year = new Date().getFullYear();
const winterYearOffset = month < winterRange[0] ? -1 : 0; const winterYearOffset = month < winterRange[0] ? -1 : 0;
const sommerYear = year + (month <= winterRange[1] ? -1 : 0); const sommerYear = year + (month <= winterRange[winterRange.length] ? -1 : 0);
const winterYear = `${year + winterYearOffset}/${(year + 1 + winterYearOffset).toString().slice(-2)}`; const winterYear = `${year + winterYearOffset}/${(year + 1 + winterYearOffset).toString().slice(-2)}`;
const wsAcronymShort = `WS ${winterYear}`; const wsAcronymShort = `WS ${winterYear}`;
@@ -643,10 +651,10 @@ const config: SCConfigFile = {
factor: 1, factor: 1,
fields: { fields: {
'academicTerms.acronym': { 'academicTerms.acronym': {
[ssAcronymShort]: inRangeInclusive(month, sommerRange) ? 1.1 : 1.05, [ssAcronymShort]: sommerRange.includes(month) ? 1.1 : 1.05,
[wsAcronymShort]: inRangeInclusive(month, winterRange) ? 1.1 : 1.05, [wsAcronymShort]: winterRange.includes(month) ? 1.1 : 1.05,
[ssAcronymLong]: inRangeInclusive(month, sommerRange) ? 1.1 : 1.05, [ssAcronymLong]: sommerRange.includes(month) ? 1.1 : 1.05,
[wsAcronymLong]: inRangeInclusive(month, winterRange) ? 1.1 : 1.05, [wsAcronymLong]: winterRange.includes(month) ? 1.1 : 1.05,
}, },
}, },
type: SCThingType.AcademicEvent, type: SCThingType.AcademicEvent,

View File

@@ -13,21 +13,21 @@
* You should have received a copy of the GNU Affero General Public License * You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import {inRangeInclusive} from '../config/default'; import {yearSlice} from '../config/default';
import {expect} from 'chai'; import {expect} from 'chai';
describe('Common', function () { describe('Common', function () {
describe('inRangeInclusive', function () { describe('yearSlice', function () {
it('should provide true if the given number is in the range', function () { it('should provide correct ascending month number ranges', function () {
expect(inRangeInclusive(1, [1, 3])).to.be.true; expect(yearSlice(1, 12)).to.eql([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);
expect(inRangeInclusive(2, [1, 3])).to.be.true;
expect(inRangeInclusive(1.1, [1, 3])).to.be.true;
expect(inRangeInclusive(3, [1, 3])).to.be.true;
}); });
it('should provide false if the given number is not in the range', function () { it('should provide correct month number ranges for year rollovers', function () {
expect(inRangeInclusive(3.1, [1, 3])).to.be.false; expect(yearSlice(12, 1)).to.eql([12, 1]);
expect(inRangeInclusive(0, [1, 3])).to.be.false; });
it('should provide correct month number ranges for a whole year', function () {
expect(yearSlice(12, 12)).to.eql([12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);
}); });
}); });
}); });