REST Service for POPCORN - ILIAS
alex
6 hours ago 6138ffe99d016cc311f250bc1555b5403b8b1216
GS-2555
5 files modified
126 ■■■■■ changed files
php/globus-ilias-rest/login.php 3 ●●●●● patch | view | raw | blame | history
test/data.js 7 ●●●●● patch | view | raw | blame | history
test/testAbmelden.js 48 ●●●●● patch | view | raw | blame | history
test/testAnmelden.js 42 ●●●●● patch | view | raw | blame | history
test/testCreateKurs.js 26 ●●●●● patch | view | raw | blame | history
php/globus-ilias-rest/login.php
@@ -167,10 +167,11 @@
// ACHTUNG course_id muss obj_id sein!
// die Rolle muss aus dem Kurs gelesen werden
// ACHTUNG ilParticipants::readParticipants() ist protected (ILIAS 9) und wird
// bereits im Konstruktor von getMembersObject() aufgerufen - nicht erneut aufrufen!
function anmelden($usr_id, $course_id) {
    $course = ilObjectFactory::getInstanceByObjId($course_id);
    $membersObject = $course->getMembersObject();
    $membersObject->readParticipants();
    $role = $membersObject::IL_CRS_MEMBER;
    return $membersObject->add($usr_id, $role);
}
test/data.js
@@ -39,9 +39,16 @@
   usr_id: 24038,
}
// real existing small course used by the anmelden/abmelden tests
const anmelden = {
   ref_id: 595,
   obj_id: 36428,   // anmelden()/abmelden() expect the course obj_id, not the ref_id
}
module.exports = {
   user,
   kurs,
   setStatus,
   anmelden,
}
test/testAbmelden.js
@@ -1,46 +1,48 @@
const expect = require("chai").expect
const _ = require("lodash")
const settings = require("../settings")
const libIlias = require("../lib/libIlias")
const db = require("../lib/db")
const testData = require("./data")
/////////////////////////////////////////////////////////////////////////
describe.skip("the function anmelden", function () {
// Integration test against a real ILIAS instance.
// Creates a temporary user, enrolls it via libIlias.anmelden() into an
// existing course, verifies that libIlias.abmelden() removes the
// membership, then cleans up.
describe("the function abmelden", function () {
   const kurs = testData.kurs // TODO
   const user = testData.user
   let kursId = null
   const courseId = testData.anmelden.obj_id
   let user = null
   let userId = null
   beforeEach(async function () {
      // const {usr_id:userId} = await libIlias.importIliasUser(user)
      const userRes  = await libIlias.importIliasUser(user)
      // const kursRes  = await libIlias.
      console.log(data)
      user = _.cloneDeep(testData.user)
      const res = await libIlias.importIliasUser(user)
      userId = res.usr_id
      // precondition: the user must be enrolled
      await libIlias.anmelden(userId, courseId)
   })
   afterEach(async function () {
      await libIlias.deleteUser(userId)
      // TODO delete kurs
      if (!userId) return
      // best effort cleanup (abmelden is idempotent)
      await libIlias.abmelden(userId, courseId).catch(console.error)
      await libIlias.deleteUser(userId).catch(console.error)
      userId = null
   })
   it("should import a new user to ILIAS", async function () {
      console.log("!111")
      console.error("finish test")
      return
      console.log("++abmelden", userId, kursId)
      const res = await libIlias.abmelden(userId, kursId)
      console.dir(res, {depth: null})
   it("should remove the Teilnahme of a user", async function () {
      const res = await libIlias.abmelden(userId, courseId)
      expect(res).to.have.property("status").and.to.equal("ok")
      expect(res.command).to.equal("abmelden")
      expect(res.method).to.equal("DELETE")
      expect(res).to.have.property("command").and.to.equal("abmelden")
      expect(res).to.have.property("method").and.to.equal("DELETE")
      const members = await db.getKursTeilnehmerByRole(courseId)
      expect(members.map(m => m.usr_id)).to.not.include(userId)
   })
})
/////////////////////////////////////////////////////////////////////////
test/testAnmelden.js
@@ -1,41 +1,45 @@
const expect = require("chai").expect
const _ = require("lodash")
const settings = require("../settings")
const libIlias = require("../lib/libIlias")
const db = require("../lib/db")
const testData = require("./data")
/////////////////////////////////////////////////////////////////////////
describe.skip("the function anmelden", function () {
// Integration test against a real ILIAS instance.
// Creates a temporary user, enrolls it via libIlias.anmelden() into an
// existing course and verifies the membership, then cleans up.
describe("the function anmelden", function () {
   const kurs = testData.kurs // TODO
   const user = testData.user
   let kursId = 31938
   let userId = 31954
   const courseId = testData.anmelden.obj_id
   let user = null
   let userId = null
   beforeEach(async function () {
      // TODO add kurs
      // const res = await libIlias.importIliasUser(user)
      // userId = res.usr_id
      user = _.cloneDeep(testData.user)
      const res = await libIlias.importIliasUser(user)
      userId = res.usr_id
   })
   afterEach(async function () {
      // await libIlias.deleteUser(userId)
      // TODO delete kurs
      if (!userId) return
      // best effort cleanup
      await libIlias.abmelden(userId, courseId).catch(console.error)
      await libIlias.deleteUser(userId).catch(console.error)
      userId = null
   })
   it("should import a new user to ILIAS", async function () {
      console.log("++anmelden", userId, kursId)
      const res = await libIlias.anmelden(userId, kursId)
      console.dir(res, {depth: null})
   it("should enroll a user into a course", async function () {
      const res = await libIlias.anmelden(userId, courseId)
      expect(res).to.have.property("status").and.to.equal("ok")
      expect(res.command).to.equal("anmelden")
      expect(res.method).to.equal("POST")
      expect(res).to.have.property("command").and.to.equal("anmelden")
      expect(res).to.have.property("method").and.to.equal("POST")
      const members = await db.getKursTeilnehmerByRole(courseId)
      expect(members.map(m => m.usr_id)).to.include(userId)
   })
})
/////////////////////////////////////////////////////////////////////////
test/testCreateKurs.js
@@ -1,33 +1,25 @@
const expect = require("chai").expect
const settings = require("../settings")
const libIlias = require("../lib/libIlias")
const db = require("../lib/db")
const testData = require("./data")
/////////////////////////////////////////////////////////////////////////
describe("the function anmelden", function () {
// Skipped: the ILIAS PHP component does not implement course creation yet
// (php/globus-ilias-rest/login.php -> createKurs() throws "not implemented").
// There is also no deleteKurs() for cleanup, so running this test would leave
// a real course behind. Enable once both exist.
describe("the function createKurs", function () {
   const kurs = testData.kurs // TODO
   let kursId = 31938
   beforeEach(async function () {
   })
   afterEach(async function () {
   })
   const kurs = testData.kurs
   it.skip("should create a new Kurs in ILIAS", async function () {
      console.log("++createKurs", kurs)
      const res = await libIlias.createKurs(kurs)
      console.dir(res, {depth: null})
      // expect(res).to.have.property("status").and.to.equal("ok")
      // expect(res.command).to.equal("anmelden")
      // expect(res.method).to.equal("POST")
      expect(res).to.have.property("status").and.to.equal("ok")
      expect(res.command).to.equal("createKurs")
      expect(res).to.have.property("ref_id").and.to.be.a("number").above(0)
   })
})
/////////////////////////////////////////////////////////////////////////