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 {
SCAboutPageContentType,
SCConfigFile,
@@ -13,21 +11,31 @@ import {readFileSync} from 'fs';
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 range Array of two numbers representing a range (inclusive interval)
* @param startMonth The month to start with (inclusive)
* @param endMonth The month to end with (inclusive)
*/
export function inRangeInclusive(number_: number, range: number[]): boolean {
return number_ >= range[0] && number_ <= range[1];
export function yearSlice(startMonth: number, endMonth: number) {
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 winterRange = [10, 1];
const sommerRange = yearSlice(3, 8);
const winterRange = yearSlice(9, 2);
const month = new Date().getMonth();
const year = new Date().getFullYear();
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 wsAcronymShort = `WS ${winterYear}`;
@@ -643,10 +651,10 @@ const config: SCConfigFile = {
factor: 1,
fields: {
'academicTerms.acronym': {
[ssAcronymShort]: inRangeInclusive(month, sommerRange) ? 1.1 : 1.05,
[wsAcronymShort]: inRangeInclusive(month, winterRange) ? 1.1 : 1.05,
[ssAcronymLong]: inRangeInclusive(month, sommerRange) ? 1.1 : 1.05,
[wsAcronymLong]: inRangeInclusive(month, winterRange) ? 1.1 : 1.05,
[ssAcronymShort]: sommerRange.includes(month) ? 1.1 : 1.05,
[wsAcronymShort]: winterRange.includes(month) ? 1.1 : 1.05,
[ssAcronymLong]: sommerRange.includes(month) ? 1.1 : 1.05,
[wsAcronymLong]: winterRange.includes(month) ? 1.1 : 1.05,
},
},
type: SCThingType.AcademicEvent,

View File

@@ -13,21 +13,21 @@
* 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/>.
*/
import {inRangeInclusive} from '../config/default';
import {yearSlice} from '../config/default';
import {expect} from 'chai';
describe('Common', function () {
describe('inRangeInclusive', function () {
it('should provide true if the given number is in the range', function () {
expect(inRangeInclusive(1, [1, 3])).to.be.true;
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;
describe('yearSlice', function () {
it('should provide correct ascending month number ranges', function () {
expect(yearSlice(1, 12)).to.eql([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);
});
it('should provide false if the given number is not in the range', function () {
expect(inRangeInclusive(3.1, [1, 3])).to.be.false;
expect(inRangeInclusive(0, [1, 3])).to.be.false;
it('should provide correct month number ranges for year rollovers', function () {
expect(yearSlice(12, 1)).to.eql([12, 1]);
});
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]);
});
});
});