Index: openacs-4/packages/xolp/tcl/xolp-activity-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-activity-procs.tcl,v diff -u -N -r1.5 -r1.6 --- openacs-4/packages/xolp/tcl/xolp-activity-procs.tcl 12 Apr 2019 11:48:01 -0000 1.5 +++ openacs-4/packages/xolp/tcl/xolp-activity-procs.tcl 12 Apr 2019 12:09:58 -0000 1.6 @@ -17,25 +17,25 @@ #################### ::xolp::iri::MetaClass create ::xolp::Activity \ - -table_name xolp_activity_dimension \ - -pretty_name "Learning Activity" \ - -id_column activity_version_id \ - -iri_unique false \ - -slots { - ::xo::db::Attribute create title - ::xo::db::Attribute create description - ::xo::db::Attribute create package_id -datatype integer - ::xo::db::Attribute create package_url - ::xo::db::Attribute create begin_timestamp -datatype date - ::xo::db::Attribute create end_timestamp -datatype date - ::xo::db::Attribute create scd_valid_from -datatype date -default "1900-01-01" - ::xo::db::Attribute create scd_valid_to -datatype date -default "9999-12-31" - } -ad_doc { - Activity Dimension - Slowly Changing Dimension - Note, as the pretty_name "Activity" is already taken in OpenACS, we use "Learning Activity" - (although not all xolp activities necessarily have a learning effect). - } + -table_name xolp_activity_dimension \ + -pretty_name "Learning Activity" \ + -id_column activity_version_id \ + -iri_unique false \ + -slots { + ::xo::db::Attribute create title + ::xo::db::Attribute create description + ::xo::db::Attribute create package_id -datatype integer + ::xo::db::Attribute create package_url + ::xo::db::Attribute create begin_timestamp -datatype date + ::xo::db::Attribute create end_timestamp -datatype date + ::xo::db::Attribute create scd_valid_from -datatype date -default "1900-01-01" + ::xo::db::Attribute create scd_valid_to -datatype date -default "9999-12-31" + } -ad_doc { + Activity Dimension + Slowly Changing Dimension + Note, as the pretty_name "Activity" is already taken in OpenACS, we use "Learning Activity" + (although not all xolp activities necessarily have a learning effect). + } #::xo::db::require index -table xolp_activity_dimension -col "iri text_pattern_ops, scd_valid_from" -unique true if {[::xo::db::require exists_table xolp_activity_dimension]} { @@ -173,11 +173,11 @@ } { Updates the activity in the xolp_activity_dimension table (without creating a new version). } { - ::xo::dc dml update_activity { - UPDATE xolp_activity_dimension - SET title = :title, scd_valid_from = current_timestamp - WHERE activity_version_id = :activity_version_id - } + ::xo::dc dml update_activity { + UPDATE xolp_activity_dimension + SET title = :title, scd_valid_from = current_timestamp + WHERE activity_version_id = :activity_version_id + } } ::xolp::Activity ad_proc update { @@ -235,7 +235,7 @@ Associate the activity with this context (e.g. the final test in a community). An activity can be associated to multiple contexts. Within each context, the activity has a relative weight (among the other activities - of this context). + of this context). In the standard case, the activities of a context have an equal share of the total weight. (E.g. when there are four activities 25% weight each). Of course, one can define differentiated weights. @@ -309,12 +309,12 @@ } { @return List of competency IRIs directly associated with this activity. } { - set sql " + set sql " SELECT DISTINCT competency_iri FROM xolp_activity_competency_bridge WHERE activity_iri = :activity_iri " - ::xo::dc list_of_lists dbqd..get_activity_competencies $sql + ::xo::dc list_of_lists dbqd..get_activity_competencies $sql } ::xolp::Activity ad_proc synchronize_competencies { @@ -341,16 +341,16 @@ # ::xolp::iri::MetaClass create ::xolp::ActivityVerb \ - -table_name xolp_activity_verb_dimension \ - -id_column activity_verb_id \ - -slots { - ::xo::db::Attribute create title - ::xo::db::Attribute create description - } -ad_doc { - An activity verb may be referred to as "type of usage" of an activity object. - For example, a client application may want to differentiate between - "practicing" and "competing in" an exam. - } + -table_name xolp_activity_verb_dimension \ + -id_column activity_verb_id \ + -slots { + ::xo::db::Attribute create title + ::xo::db::Attribute create description + } -ad_doc { + An activity verb may be referred to as "type of usage" of an activity object. + For example, a client application may want to differentiate between + "practicing" and "competing in" an exam. + } ::xolp::ActivityVerb require -iri "http://dotlrn.org/xolp/activity-verbs/unknown" @@ -359,9 +359,16 @@ # This could also be realized as simple column in the activity_dimension table. ::xolp::iri::MetaClass create ::xolp::ActivityType \ - -table_name xolp_activity_types \ - -id_column activity_type_id + -table_name xolp_activity_types \ + -id_column activity_type_id } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-competency-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-competency-procs.tcl,v diff -u -N -r1.7 -r1.8 --- openacs-4/packages/xolp/tcl/xolp-competency-procs.tcl 12 Apr 2019 11:48:01 -0000 1.7 +++ openacs-4/packages/xolp/tcl/xolp-competency-procs.tcl 12 Apr 2019 12:09:58 -0000 1.8 @@ -14,15 +14,15 @@ # ::xolp::iri::MetaClass create ::xolp::Competency \ - -table_name xolp_competency_dimension \ - -id_column competency_id \ - -slots { - ::xo::db::Attribute create title -datatype text - ::xo::db::Attribute create description -datatype text - } -ad_doc { - A competency is a demand-oriented human potentiality for action that can be learned - and involves cognitive and non-cognitive elements (see Stahl and Wild 2006). - } + -table_name xolp_competency_dimension \ + -id_column competency_id \ + -slots { + ::xo::db::Attribute create title -datatype text + ::xo::db::Attribute create description -datatype text + } -ad_doc { + A competency is a demand-oriented human potentiality for action that can be learned + and involves cognitive and non-cognitive elements (see Stahl and Wild 2006). + } ::xolp::Competency require -iri "http://dotlrn.org/xolp/competencies/unknown" @@ -161,11 +161,11 @@ } { @return List of competency IRIs attached to the given competency. } { - return [::xo::dc list get_competencies { - SELECT competency_iri - FROM xolp_competency_hierarchy_bridge - WHERE context_competency_iri = :competency_iri - }] + return [::xo::dc list get_competencies { + SELECT competency_iri + FROM xolp_competency_hierarchy_bridge + WHERE context_competency_iri = :competency_iri + }] } # @@ -225,3 +225,10 @@ } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-date-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-date-procs.tcl,v diff -u -N -r1.2 -r1.3 --- openacs-4/packages/xolp/tcl/xolp-date-procs.tcl 29 Jun 2018 17:27:19 -0000 1.2 +++ openacs-4/packages/xolp/tcl/xolp-date-procs.tcl 12 Apr 2019 12:09:58 -0000 1.3 @@ -105,3 +105,10 @@ } } + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-evaluation-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-evaluation-procs.tcl,v diff -u -N -r1.5 -r1.6 --- openacs-4/packages/xolp/tcl/xolp-evaluation-procs.tcl 12 Apr 2019 11:48:01 -0000 1.5 +++ openacs-4/packages/xolp/tcl/xolp-evaluation-procs.tcl 12 Apr 2019 12:09:58 -0000 1.6 @@ -16,23 +16,23 @@ # ::xolp::iri::MetaClass create ::xolp::EvaluationSchema \ - -table_name xolp_evalschemas \ - -id_column evalschema_id \ - -slots { - ::xo::db::Attribute create title - ::xo::db::Attribute create description - ::xo::db::Attribute create level_names - ::xo::db::Attribute create positive_threshold_index \ - -default 0 \ - -datatype integer - } -ad_doc { - An evaluation schema is used for translating - raw (percentage) scores into meaningful levels, - e.g. grades. - } + -table_name xolp_evalschemas \ + -id_column evalschema_id \ + -slots { + ::xo::db::Attribute create title + ::xo::db::Attribute create description + ::xo::db::Attribute create level_names + ::xo::db::Attribute create positive_threshold_index \ + -default 0 \ + -datatype integer + } -ad_doc { + An evaluation schema is used for translating + raw (percentage) scores into meaningful levels, + e.g. grades. + } ::xolp::EvaluationSchema ad_proc new_persistent_object {args} { - Create new persistent object + Create new persistent object } { array set argsarray $args if {[llength [array get argsarray "-level_names"]] > 0 @@ -44,18 +44,18 @@ } ::xolp::iri::MetaClass create ::xolp::EvaluationScale \ - -table_name xolp_evalscales \ - -id_column evalscale_id \ - -slots { - ::xo::db::Attribute create title - ::xo::db::Attribute create evalschema_id \ - -datatype integer \ - -references "xolp_evalschemas" - ::xo::db::Attribute create thresholds - } -ad_doc { - An evaluation scale carries the actual thresholds - for dividing the range from 0 to 100 into levels. - } + -table_name xolp_evalscales \ + -id_column evalscale_id \ + -slots { + ::xo::db::Attribute create title + ::xo::db::Attribute create evalschema_id \ + -datatype integer \ + -references "xolp_evalschemas" + ::xo::db::Attribute create thresholds + } -ad_doc { + An evaluation scale carries the actual thresholds + for dividing the range from 0 to 100 into levels. + } ::xo::db::require table xolp_evalscale_activity_bridge { evalscale_id {INTEGER NOT NULL REFERENCES xolp_evalscales ON DELETE CASCADE} @@ -83,7 +83,7 @@ } ::xolp::EvaluationScale ad_instproc initialize_loaded_object {} { - Initialize loaded object + Initialize loaded object } { :levels } @@ -166,20 +166,20 @@ set ticks [list 0 {*}${:thresholds} 100] for {set i 0} {$i < [llength $ticks]-1} {incr i} { lappend levels [::xolp::EvaluationScale::Level create [self]::$i \ - -min [lindex $ticks $i] \ - -max [lindex $ticks $i+1]] + -min [lindex $ticks $i] \ + -max [lindex $ticks $i+1]] } return $levels } ::xotcl::Class create ::xolp::EvaluationScale::Level \ - -parameter { - min:required - max:required - } -ad_doc { - @param min Lower boundary (inklusive) - @param max Upper boundary (exklusive for all but highest level) - } + -parameter { + min:required + max:required + } -ad_doc { + @param min Lower boundary (inklusive) + @param max Upper boundary (exklusive for all but highest level) + } ::xolp::EvaluationScale::Level ad_instproc name { } { @@ -244,3 +244,10 @@ } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-indicator-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-indicator-procs.tcl,v diff -u -N -r1.9 -r1.10 --- openacs-4/packages/xolp/tcl/xolp-indicator-procs.tcl 12 Apr 2019 11:48:01 -0000 1.9 +++ openacs-4/packages/xolp/tcl/xolp-indicator-procs.tcl 12 Apr 2019 12:09:58 -0000 1.10 @@ -17,30 +17,30 @@ # Indicators # ::xotcl::Class create ::xolp::Indicator \ - -parameter { - indicator_id - user_id - activity_verb_id - activity_version_id - competency_set_id - begin_timestamp - begin_date_id - begin_time_id - end_timestamp - end_date_id - end_time_id - storage_timestamp - storage_date_id - storage_time_id - result_numerator - result_denominator - } \ - -ad_doc { - Primary Fact Table Abstraction - } + -parameter { + indicator_id + user_id + activity_verb_id + activity_version_id + competency_set_id + begin_timestamp + begin_date_id + begin_time_id + end_timestamp + end_date_id + end_time_id + storage_timestamp + storage_date_id + storage_time_id + result_numerator + result_denominator + } \ + -ad_doc { + Primary Fact Table Abstraction + } ::xolp::Indicator ad_proc essential_attributes {} { - Return essential attributes + Return essential attributes } { set attributes [::xolp::util::lremove [:info parameter] { indicator_id begin_date_id end_date_id begin_time_id end_time_id storage_date_id storage_time_id @@ -49,7 +49,7 @@ } ::xolp::Indicator ad_instproc init args { - Init class + Init class } { next :destroy_on_cleanup @@ -97,15 +97,15 @@ ::xo::dc dml create-trigger { CREATE OR REPLACE FUNCTION xolp_indicator_upsert_tr() RETURNS trigger AS ' - BEGIN - NEW.begin_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.begin_timestamp::date); - NEW.begin_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.begin_timestamp::time,''HH24:MI'')::time); - NEW.end_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.end_timestamp::date); - NEW.end_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.end_timestamp::time,''HH24:MI'')::time); - NEW.storage_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.storage_timestamp::date); - NEW.storage_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.storage_timestamp::time,''HH24:MI'')::time); - RETURN NEW; - END; + BEGIN + NEW.begin_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.begin_timestamp::date); + NEW.begin_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.begin_timestamp::time,''HH24:MI'')::time); + NEW.end_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.end_timestamp::date); + NEW.end_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.end_timestamp::time,''HH24:MI'')::time); + NEW.storage_date_id := (SELECT date_id FROM xolp_date_dimension where date = NEW.storage_timestamp::date); + NEW.storage_time_id := (SELECT time_id FROM xolp_time_dimension where time = to_char(NEW.storage_timestamp::time,''HH24:MI'')::time); + RETURN NEW; + END; ' LANGUAGE plpgsql; DROP TRIGGER IF EXISTS xolp_indicator_upsert_tr ON xolp_indicator_facts; CREATE TRIGGER xolp_indicator_upsert_tr BEFORE INSERT OR UPDATE ON xolp_indicator_facts FOR EACH ROW EXECUTE PROCEDURE xolp_indicator_upsert_tr(); @@ -114,7 +114,7 @@ ::xolp::Indicator ad_proc exists_in_db { {-indicator_id:required} } { - Checks for objects existance in the database + Checks for objects existance in the database } { ::xo::dc get_value select_object {select 1 from xolp_indicator_facts where indicator_id = :indicator_id} 0 } @@ -124,7 +124,7 @@ {-user_ids ""} {-activity_version_ids ""} } { - Delete object + Delete object } { if {$indicator_id ne ""} { ::xo::dc dml delete {DELETE FROM xolp_indicator_facts WHERE indicator_id = :indicator_id} @@ -311,17 +311,17 @@ @param begin_timestamp The timestamp at which the (learning) activity began (default: equal to end_timestamp) @param end_timestamp The timestamp at which the (learning) activity ended @param return Specify kind of return value. The default will return nothing and is the fastest. - Further valid values are "id" (returns the newly created indicator_id) - and "object", which returns an initialized instance object of type Indicator. + Further valid values are "id" (returns the newly created indicator_id) + and "object", which returns an initialized instance object of type Indicator. } { if {$user_id eq ""} { set user_id [ad_conn user_id] } if {$activity_version_id eq ""} { set activity_version_id [::xolp::Activity require \ - -iri [ad_url][ad_conn url] \ - -update false \ - -return id] + -iri [ad_url][ad_conn url] \ + -update false \ + -return id] } set storage_timestamp [dt_systime] if {$end_timestamp eq ""} { @@ -332,8 +332,8 @@ } if {$activity_verb_id eq ""} { set activity_verb [::xolp::ActivityVerb require \ - -iri "http://dotlrn.org/xolp/activity-verbs/unknown" \ - -update false] + -iri "http://dotlrn.org/xolp/activity-verbs/unknown" \ + -update false] set activity_verb_id [$activity_verb set activity_verb_id] } set attributes [:essential_attributes] @@ -361,7 +361,7 @@ } ::xolp::Indicator ad_instproc save {} { - Save object + Save object } { set attributes [[:info class] essential_attributes] :instvar indicator_id {*}$attributes @@ -380,24 +380,31 @@ ::xo::db::require view xolp_indicators_activities_view { SELECT - facts.user_id, - v.iri AS activity_verb_iri, - a.iri AS activity_iri, - facts.begin_timestamp, - facts.end_timestamp, - age(facts.end_timestamp, facts.begin_timestamp) AS duration, - facts.result_numerator, - facts.result_denominator, - (result_numerator::numeric / result_denominator::numeric) * 100 AS result_percentage + facts.user_id, + v.iri AS activity_verb_iri, + a.iri AS activity_iri, + facts.begin_timestamp, + facts.end_timestamp, + age(facts.end_timestamp, facts.begin_timestamp) AS duration, + facts.result_numerator, + facts.result_denominator, + (result_numerator::numeric / result_denominator::numeric) * 100 AS result_percentage FROM - xolp_indicator_facts facts + xolp_indicator_facts facts INNER JOIN - xolp_activity_dimension a USING (activity_version_id) + xolp_activity_dimension a USING (activity_version_id) INNER JOIN - xolp_activity_verb_dimension v USING (activity_verb_id) + xolp_activity_verb_dimension v USING (activity_verb_id) } } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-iri-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-iri-procs.tcl,v diff -u -N -r1.3 -r1.4 --- openacs-4/packages/xolp/tcl/xolp-iri-procs.tcl 12 Apr 2019 11:48:01 -0000 1.3 +++ openacs-4/packages/xolp/tcl/xolp-iri-procs.tcl 12 Apr 2019 12:09:58 -0000 1.4 @@ -9,13 +9,13 @@ namespace eval ::xolp::iri { ::xotcl::Class create ::xolp::iri::MetaClass \ - -superclass ::xo::db::Class \ - -parameter { - {iri_unique true} - } -ad_doc { - This meta class provides generic methods for the - application classes (such as ::xolp::Activity). - } + -superclass ::xo::db::Class \ + -parameter { + {iri_unique true} + } -ad_doc { + This meta class provides generic methods for the + application classes (such as ::xolp::Activity). + } ::xolp::iri::MetaClass ad_instproc init {args} { Initializes the application class with an iri attribute and @@ -26,7 +26,7 @@ ::xo::db::Attribute create iri } next - if {[::xo::db::require exists_table ${:table_name}]} { + if {[::xo::db::require exists_table ${:table_name}]} { :log "Requiring unique index for ${:table_name}.iri" ::xo::db::require index -table ${:table_name} -col "iri" -unique ${:iri_unique} } @@ -52,8 +52,8 @@ Require (create or update) an object for this IRI. @param update Whether or not to update an existing object with the provided values. @param return Specify kind of return value. The default will return nothing and is the fastest. - Further valid values are "id" (returns the newly created indicator_id) - and "object", which returns an initialized instance object of type Indicator. + Further valid values are "id" (returns the newly created indicator_id) + and "object", which returns an initialized instance object of type Indicator. @return Returns an id or an instantiated object. } { set object_ids [:get_object_ids -iri $iri] @@ -89,3 +89,10 @@ } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-procs.tcl,v diff -u -N -r1.3 -r1.4 --- openacs-4/packages/xolp/tcl/xolp-procs.tcl 29 Jun 2018 17:27:19 -0000 1.3 +++ openacs-4/packages/xolp/tcl/xolp-procs.tcl 12 Apr 2019 12:09:58 -0000 1.4 @@ -182,3 +182,10 @@ } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-time-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-time-procs.tcl,v diff -u -N -r1.2 -r1.3 --- openacs-4/packages/xolp/tcl/xolp-time-procs.tcl 29 Jun 2018 17:27:19 -0000 1.2 +++ openacs-4/packages/xolp/tcl/xolp-time-procs.tcl 12 Apr 2019 12:09:58 -0000 1.3 @@ -90,3 +90,10 @@ } } + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-user-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-user-procs.tcl,v diff -u -N -r1.5 -r1.6 --- openacs-4/packages/xolp/tcl/xolp-user-procs.tcl 12 Apr 2019 11:48:01 -0000 1.5 +++ openacs-4/packages/xolp/tcl/xolp-user-procs.tcl 12 Apr 2019 12:09:58 -0000 1.6 @@ -45,27 +45,27 @@ {-policy "best"} {-null_as_zero false} } { - Get evaluation + Get evaluation } { set activity_version_id [lindex [::xolp::Activity get_object_ids -iri $iri] 0] set evalscale [::xolp::EvaluationScale get_evalscales_from_activity_version_id -activity_version_id $activity_version_id] if {$evalscale eq ""} { error "There is no evaluation scale associated with context '$iri'." } set result [:get_result \ - -format "%s" \ - -user_id $user_id \ - -context_iri $context_iri \ - -iri $iri \ - -policy $policy \ - -null_as_zero $null_as_zero] + -format "%s" \ + -user_id $user_id \ + -context_iri $context_iri \ + -iri $iri \ + -policy $policy \ + -null_as_zero $null_as_zero] if {$result eq ""} { error "There is no result for user '$user_id' and activity '$iri' in context '$context_iri'.\n Depending on the context, you may want to use parameter null_as_zero to handle this." } set evaluated_results [::xolp::Evaluator evaluate \ - -results $result \ - -evalscales $evalscale] + -results $result \ + -evalscales $evalscale] set evaluation [dict get $evaluated_results $result $evalscale] return $evaluation } @@ -101,18 +101,18 @@ # FROM xolp_competency_dimension INNER JOIN competencies USING (competency_id) # " set sql { - SELECT iri, xolp_weighted_competency_result(:user_id,iri,:agg) - from ( - select distinct cd.iri - from xolp_competency_dimension cd, - xolp_activity_competency_bridge acb, - xolp_activity_dimension ad, - xolp_indicator_facts if - where cd.iri = acb.competency_iri - and acb.activity_iri = ad.iri - and ad.activity_version_id = if.activity_version_id - and if.user_id = :user_id - ) as competencies + SELECT iri, xolp_weighted_competency_result(:user_id,iri,:agg) + from ( + select distinct cd.iri + from xolp_competency_dimension cd, + xolp_activity_competency_bridge acb, + xolp_activity_dimension ad, + xolp_indicator_facts if + where cd.iri = acb.competency_iri + and acb.activity_iri = ad.iri + and ad.activity_version_id = if.activity_version_id + and if.user_id = :user_id + ) as competencies } set competencies [::xo::dc list_of_lists get_competencies $sql] set result_dict "" @@ -168,7 +168,7 @@ {-format "%.2f"} {-null_as_zero false} } { - Get competency result + Get competency result } { set agg [string map -nocase {best max worst min average avg} $policy] if {$agg ni "min max avg"} {error "Unknown policy."} @@ -185,26 +185,33 @@ {-format "%.2f"} {-null_as_zero false} } { - Get competency evaluation + Get competency evaluation } { set result [:get_competency_result \ - -format "%s" \ - -user_id $user_id \ - -competency_iri $competency_iri \ - -policy $policy \ - -null_as_zero $null_as_zero] + -format "%s" \ + -user_id $user_id \ + -competency_iri $competency_iri \ + -policy $policy \ + -null_as_zero $null_as_zero] if {$result eq ""} { error "There is no result for user '$user_id' and competency '$competency_iri'." } set evalscale [::xolp::EvaluationScale get_evalscales_from_competency_iri \ - -competency_iri $competency_iri] + -competency_iri $competency_iri] set evaluated_results [::xolp::Evaluator evaluate \ - -results $result \ - -evalscales $evalscale] + -results $result \ + -evalscales $evalscale] set evaluation [dict get $evaluated_results $result $evalscale] return $evaluation } } ::xo::library source_dependent + +# +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: Index: openacs-4/packages/xolp/tcl/xolp-util-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/xolp-util-procs.tcl,v diff -u -N -r1.3 -r1.4 --- openacs-4/packages/xolp/tcl/xolp-util-procs.tcl 11 Apr 2019 11:32:04 -0000 1.3 +++ openacs-4/packages/xolp/tcl/xolp-util-procs.tcl 12 Apr 2019 12:09:58 -0000 1.4 @@ -106,21 +106,28 @@ ad_proc random_earlier_timestamp {ts} { Simple function to generate from an end_timestamp a "random" begin_timestamp, - which is within sensible boundaries. + which is within sensible boundaries. } { - set ts [clock scan $ts -format "%Y-%m-%d %T z" -timezone :UTC] - clock format [clock add $ts -[expr {int(rand()*180)}] minute] -format "%Y-%m-%d %T z" -timezone :UTC + set ts [clock scan $ts -format "%Y-%m-%d %T z" -timezone :UTC] + clock format [clock add $ts -[expr {int(rand()*180)}] minute] -format "%Y-%m-%d %T z" -timezone :UTC } ad_proc -private get_testcase_for_documentation {-case:required {-index 3}} { } { - package require textutil - foreach t [nsv_get aa_test cases] { - lassign $t id desc file pkg cats inits err body _ - if {$id eq $case && $pkg eq "xolp"} { - return "
[regsub "\n\n" [textutil::undent [lindex $body 0 $index]] ""]
"
- }
+ package require textutil
+ foreach t [nsv_get aa_test cases] {
+ lassign $t id desc file pkg cats inits err body _
+ if {$id eq $case && $pkg eq "xolp"} {
+ return "[regsub "\n\n" [textutil::undent [lindex $body 0 $index]] ""]
"
}
+ }
}
-}
+ }
+
+#
+# Local variables:
+# mode: tcl
+# tcl-indent-level: 2
+# indent-tabs-mode: nil
+# End:
Index: openacs-4/packages/xolp/tcl/test/xolp-test-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xolp/tcl/test/xolp-test-procs.tcl,v
diff -u -N -r1.13 -r1.14
--- openacs-4/packages/xolp/tcl/test/xolp-test-procs.tcl 12 Apr 2019 11:15:36 -0000 1.13
+++ openacs-4/packages/xolp/tcl/test/xolp-test-procs.tcl 12 Apr 2019 12:09:58 -0000 1.14
@@ -1,8 +1,8 @@
ad_library {
- Regression test suite
+ Regression test suite
- @author Michael Aram
- @creation-date 2017
+ @author Michael Aram
+ @creation-date 2017
}
@@ -21,9 +21,9 @@
"Create an Activity Verb" {
aa_export_vars {activity_verb}
set activity_verb [::xolp::ActivityVerb new_persistent_object \
- -iri "https://example.com/verb/perform" \
- -title [ad_generate_random_string] \
- -description [ad_generate_random_string]]
+ -iri "https://example.com/verb/perform" \
+ -title [ad_generate_random_string] \
+ -description [ad_generate_random_string]]
set activity_verb_id [$activity_verb object_id]
$activity_verb destroy
set activity_verb [::xo::db::Class get_instance_from_db -id $activity_verb_id]
@@ -41,9 +41,9 @@
"Require an Activity Verb" {
aa_export_vars {activity_verb}
set activity_verb [::xolp::ActivityVerb require \
- -iri "http://adlnet.gov/expapi/verbs/experienced" \
- -title "Ooops" \
- -description [ad_generate_random_string]]
+ -iri "http://adlnet.gov/expapi/verbs/experienced" \
+ -title "Ooops" \
+ -description [ad_generate_random_string]]
aa_log "ActivityVerb ID: [$activity_verb set object_id]"
aa_true "Requiring the standard activity verb succeeded" {
@@ -55,9 +55,9 @@
set title [ad_generate_random_string]
set activity_verb [::xolp::ActivityVerb require \
- -iri "http://adlnet.gov/expapi/verbs/experienced" \
- -title $title \
- -description [ad_generate_random_string]]
+ -iri "http://adlnet.gov/expapi/verbs/experienced" \
+ -title $title \
+ -description [ad_generate_random_string]]
aa_log "ActivityVerb ID: [$activity_verb set object_id]"
aa_true "Requiring the standard activity verb (with fixed typos) succeeded" {
[info exists activity_verb]
@@ -96,22 +96,22 @@
"Create an Evaluation Schema" {
aa_export_vars {evaluation_schema}
catch {::xolp::EvaluationSchema new_persistent_object \
- -iri "https://example.com/xyz" \
- -title [ad_generate_random_string] \
- -description [ad_generate_random_string] \
- -level_names {x y z} \
- -positive_threshold_index 2} catch_result
+ -iri "https://example.com/xyz" \
+ -title [ad_generate_random_string] \
+ -description [ad_generate_random_string] \
+ -level_names {x y z} \
+ -positive_threshold_index 2} catch_result
aa_log $catch_result
aa_true "Requiring a schema with a bad positive_threshold_index errored as expected" {
[string match "*positive_threshold_index must refer*" $catch_result]
}
set evaluation_schema [::xolp::EvaluationSchema new_persistent_object \
- -iri "https://example.com/abcd" \
- -title [ad_generate_random_string] \
- -description [ad_generate_random_string] \
- -level_names {a b c d} \
- -positive_threshold_index 1]
+ -iri "https://example.com/abcd" \
+ -title [ad_generate_random_string] \
+ -description [ad_generate_random_string] \
+ -level_names {a b c d} \
+ -positive_threshold_index 1]
set evaluation_schema_id [$evaluation_schema object_id]
$evaluation_schema destroy
set evaluation_schema [::xo::db::Class get_instance_from_db -id $evaluation_schema_id]
@@ -130,11 +130,11 @@
"Require an Evaluation Schema" {
aa_export_vars {evaluation_schema}
set evaluation_schema [::xolp::EvaluationSchema require \
- -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" \
- -title "Ooops" \
- -description "Five levels from 5 (worst) to 1 (best). All except 5 are positive. (Austria)" \
- -level_names {five four three two one} \
- -positive_threshold_index 0]
+ -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" \
+ -title "Ooops" \
+ -description "Five levels from 5 (worst) to 1 (best). All except 5 are positive. (Austria)" \
+ -level_names {five four three two one} \
+ -positive_threshold_index 0]
aa_log "EvaluationSchema ID: [$evaluation_schema set object_id]"
aa_true "Requiring the standard evaluation schema succeeded" {
@@ -145,11 +145,11 @@
}
set evaluation_schema [::xolp::EvaluationSchema require \
- -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" \
- -title "5 to 1" \
- -description "Five levels from 5 (worst) to 1 (best). All except 5 are positive. (Austria)" \
- -level_names {five four three two one} \
- -positive_threshold_index 0]
+ -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" \
+ -title "5 to 1" \
+ -description "Five levels from 5 (worst) to 1 (best). All except 5 are positive. (Austria)" \
+ -level_names {five four three two one} \
+ -positive_threshold_index 0]
aa_log "EvaluationSchema ID: [$evaluation_schema set object_id]"
aa_true "Requiring the standard evaluation schema (with fixed typos) succeeded" {
[info exists evaluation_schema]
@@ -189,9 +189,9 @@
aa_export_vars {evaluation_schema evaluation_scale}
set evaluation_scale_title "Test Evaluation Scale 60-70-80-90"
set evaluation_scale [::xolp::EvaluationScale new_persistent_object \
- -title $evaluation_scale_title \
- -evalschema_id [$evaluation_schema object_id] \
- -thresholds "60 70 80 90"]
+ -title $evaluation_scale_title \
+ -evalschema_id [$evaluation_schema object_id] \
+ -thresholds "60 70 80 90"]
aa_true "Persisting a new evaluation scale succeeded" {
[info exists evaluation_scale]
&& [::xotcl::Object isobject $evaluation_scale]
@@ -209,9 +209,9 @@
aa_export_vars {evaluation_schema evaluation_scale}
set evaluation_scale_title "Test Evaluation Scale Bad/Good"
set evaluation_scale [::xolp::EvaluationScale require \
- -iri "http://example.com/" \
- -title "Ooops" \
- -thresholds "1 99"]
+ -iri "http://example.com/" \
+ -title "Ooops" \
+ -thresholds "1 99"]
aa_true "Persisting a new evaluation scale succeeded" {
[info exists evaluation_scale]
&& [::xotcl::Object isobject $evaluation_scale]
@@ -223,9 +223,9 @@
aa_log "evaluation_scale ID: [$evaluation_scale set object_id]"
set evaluation_scale [::xolp::EvaluationScale require \
- -iri "http://example.com/" \
- -title $evaluation_scale_title \
- -thresholds "50"]
+ -iri "http://example.com/" \
+ -title $evaluation_scale_title \
+ -thresholds "50"]
aa_true "Persisting a new evaluation scale succeeded" {
[info exists evaluation_scale]
&& [::xotcl::Object isobject $evaluation_scale]
@@ -269,7 +269,7 @@
set iri "http://example.com/a1"
set activity_title "Test Activity"
set activity [::xolp::Activity new_persistent_object \
- -iri $iri -title "Oopsy.."]
+ -iri $iri -title "Oopsy.."]
set object_id [$activity object_id]
$activity destroy
::xo::db::Class get_instance_from_db -id $object_id
@@ -287,8 +287,8 @@
aa_export_vars {iri}
set new_title "New Title [ad_generate_random_string]"
set activity [::xolp::Activity update \
- -iri $iri \
- -title $new_title]
+ -iri $iri \
+ -title $new_title]
aa_log "Newly inserted Activity Dimension row: $activity"
aa_true "Persisting a new Activity succeeded" {
[info exists activity]
@@ -306,7 +306,7 @@
aa_export_vars {activity}
set activity_title "Test Activity"
set activity [::xolp::Activity require \
- -iri "http://example.com/a1" -title "Oopsi.."]
+ -iri "http://example.com/a1" -title "Oopsi.."]
aa_true "Persisting a new Activity succeeded" {
[info exists activity]
&& [::xotcl::Object isobject $activity]
@@ -317,8 +317,8 @@
$activity destroy
set activity [::xolp::Activity require \
- -iri "http://example.com/a1" \
- -title $activity_title]
+ -iri "http://example.com/a1" \
+ -title $activity_title]
aa_true "Persisting a new Activity succeeded" {
[info exists activity]
&& [::xotcl::Object isobject $activity]
@@ -373,14 +373,14 @@
set activity_version_id [$activity activity_version_id]
set result_numerator [format "%.0f" [expr {[random] * 100}]]
set indicator [::xolp::Indicator insert \
- -user_id [ad_conn user_id] \
- -activity_version_id $activity_version_id \
- -begin_timestamp "2014-01-01 00:00:00" \
- -end_timestamp "2014-01-03 00:00:00" \
- -result_numerator $result_numerator \
- -competency_set_id 1 \
- -result_denominator 1000 \
- -return object]
+ -user_id [ad_conn user_id] \
+ -activity_version_id $activity_version_id \
+ -begin_timestamp "2014-01-01 00:00:00" \
+ -end_timestamp "2014-01-03 00:00:00" \
+ -result_numerator $result_numerator \
+ -competency_set_id 1 \
+ -result_denominator 1000 \
+ -return object]
aa_true "Persisting a new indicator succeeded" {
[$indicator activity_version_id] eq $activity_version_id
&& [$indicator user_id] eq [ad_conn user_id]
@@ -420,7 +420,7 @@
$indicator destroy
set indicator [::xolp::Indicator get_instance_from_db \
- -indicator_id $indicator_id]
+ -indicator_id $indicator_id]
$indicator user_id 0; # Anonymous
$indicator begin_timestamp 2013-01-01
$indicator end_timestamp 2013-01-04
@@ -472,15 +472,15 @@
lassign $activity_iris a1 a2 a3
set data [list \
- $u1 $c1 $a1 "xolp:test:v:practiced" "2016-10-01 09:00:00" "2016-10-01 10:00:00" 30 90 \
- $u1 $c1 $a1 "xolp:test:v:practiced" "2016-10-01 09:00:00" "2016-10-01 11:00:00" 60 90 \
- $u1 $c1 $a1 "xolp:test:v:competed" "2016-10-02 08:15:00" "2016-10-02 09:00:00" 1 1 \
- $u1 $c1 $a1 "xolp:test:v:competed" "2016-10-02 09:30:00" "2016-10-02 10:00:00" 9000 18000 \
- $u1 $c1 $a2 "xolp:test:v:practiced" "2016-11-01 09:00:00" "2016-11-01 10:00:00" 23 100 \
- $u1 $c1 $a2 "xolp:test:v:practiced" "2016-11-02 11:15:00" "2016-11-02 12:00:00" 22 100 \
- $u1 $c1 $a3 "xolp:test:v:competed" "2016-10-03 09:45:00" "2016-10-03 10:00:00" 0 100 \
- $u2 $c2 $a3 "xolp:test:v:competed" "2016-10-04 13:00:00" "2016-10-04 14:00:00" 87 100 \
- ]
+ $u1 $c1 $a1 "xolp:test:v:practiced" "2016-10-01 09:00:00" "2016-10-01 10:00:00" 30 90 \
+ $u1 $c1 $a1 "xolp:test:v:practiced" "2016-10-01 09:00:00" "2016-10-01 11:00:00" 60 90 \
+ $u1 $c1 $a1 "xolp:test:v:competed" "2016-10-02 08:15:00" "2016-10-02 09:00:00" 1 1 \
+ $u1 $c1 $a1 "xolp:test:v:competed" "2016-10-02 09:30:00" "2016-10-02 10:00:00" 9000 18000 \
+ $u1 $c1 $a2 "xolp:test:v:practiced" "2016-11-01 09:00:00" "2016-11-01 10:00:00" 23 100 \
+ $u1 $c1 $a2 "xolp:test:v:practiced" "2016-11-02 11:15:00" "2016-11-02 12:00:00" 22 100 \
+ $u1 $c1 $a3 "xolp:test:v:competed" "2016-10-03 09:45:00" "2016-10-03 10:00:00" 0 100 \
+ $u2 $c2 $a3 "xolp:test:v:competed" "2016-10-04 13:00:00" "2016-10-04 14:00:00" 87 100 \
+ ]
foreach {user_id context_iri activity_iri verb_iri begin_timestamp end_timestamp rn rd} $data {
::xolp::Activity require -update false -iri $context_iri
@@ -490,17 +490,17 @@
set verb [::xolp::ActivityVerb require -update false -iri $verb_iri]
set activity_verb_id [$verb activity_verb_id]
::xolp::Indicator insert \
- -user_id $user_id \
- -activity_verb_id $activity_verb_id \
- -activity_version_id $activity_version_id \
- -begin_timestamp $begin_timestamp \
- -end_timestamp $end_timestamp \
- -result_numerator $rn \
- -result_denominator $rd
+ -user_id $user_id \
+ -activity_verb_id $activity_verb_id \
+ -activity_version_id $activity_version_id \
+ -begin_timestamp $begin_timestamp \
+ -end_timestamp $end_timestamp \
+ -result_numerator $rn \
+ -result_denominator $rd
}
} {
- foreach u $test_user_ids {acs_user::delete -user_id $u -permanent}
- foreach a $activity_iris {::xolp::Activity delete -iri $a}
+ foreach u $test_user_ids {acs_user::delete -user_id $u -permanent}
+ foreach a $activity_iris {::xolp::Activity delete -iri $a}
}
aa_register_init_class \
@@ -519,74 +519,74 @@
::xolp::Competency require -iri "http://example.com/competencies/programming/tcl"
::xolp::Competency add_to_competency \
- -competency_iri "http://example.com/competencies/computational-thinking" \
- -context_competency_iri "http://example.com/competencies/abstract-thinking" \
- -weight_numerator 6 \
- -weight_denominator 10 \
- -check false
+ -competency_iri "http://example.com/competencies/computational-thinking" \
+ -context_competency_iri "http://example.com/competencies/abstract-thinking" \
+ -weight_numerator 6 \
+ -weight_denominator 10 \
+ -check false
# Fullstack Webdevelopment books up to SW-Dev and Computational Thinking
::xolp::Competency add_to_competency \
- -competency_iri "http://example.com/competencies/fullstack-webdev" \
- -context_competency_iri "http://example.com/competencies/software-development" \
- -weight_numerator 50 \
- -weight_denominator 100 \
- -check false
+ -competency_iri "http://example.com/competencies/fullstack-webdev" \
+ -context_competency_iri "http://example.com/competencies/software-development" \
+ -weight_numerator 50 \
+ -weight_denominator 100 \
+ -check false
::xolp::Competency add_to_competency \
- -competency_iri "http://example.com/competencies/fullstack-webdev" \
- -context_competency_iri "http://example.com/competencies/computational-thinking" \
- -weight_numerator 75 \
- -weight_denominator 100 \
- -check false
+ -competency_iri "http://example.com/competencies/fullstack-webdev" \
+ -context_competency_iri "http://example.com/competencies/computational-thinking" \
+ -weight_numerator 75 \
+ -weight_denominator 100 \
+ -check false
# Fullstack Webdevelopment is itself a compound competency
::xolp::Competency add_to_competency \
- -competency_iri "http://example.com/competencies/programming/tcl" \
- -context_competency_iri "http://example.com/competencies/fullstack-webdev" \
- -weight_numerator 10 \
- -weight_denominator 40 \
- -check false
+ -competency_iri "http://example.com/competencies/programming/tcl" \
+ -context_competency_iri "http://example.com/competencies/fullstack-webdev" \
+ -weight_numerator 10 \
+ -weight_denominator 40 \
+ -check false
::xolp::Competency add_to_competency \
- -competency_iri "http://example.com/competencies/database-design" \
- -context_competency_iri "http://example.com/competencies/fullstack-webdev" \
- -weight_numerator 1 \
- -weight_denominator 4 \
- -check false
+ -competency_iri "http://example.com/competencies/database-design" \
+ -context_competency_iri "http://example.com/competencies/fullstack-webdev" \
+ -weight_numerator 1 \
+ -weight_denominator 4 \
+ -check false
# This simple Tcl exam can proof only that you know Tcl a bit (33.3%, lets say)
::xolp::Activity add_to_competency \
- -activity_iri "http://example.com/tcl-exam" \
- -competency_iri "http://example.com/competencies/programming/tcl" \
- -charge_numerator 3 \
- -charge_denominator 9
+ -activity_iri "http://example.com/tcl-exam" \
+ -competency_iri "http://example.com/competencies/programming/tcl" \
+ -charge_numerator 3 \
+ -charge_denominator 9
# If you can handle OpenACS, however, you end up nearly as Tcl ninja (90%, lets say)
::xolp::Activity add_to_competency \
- -activity_iri "http://example.com/openacs-exam" \
- -competency_iri "http://example.com/competencies/programming/tcl" \
- -charge_numerator 90
+ -activity_iri "http://example.com/openacs-exam" \
+ -competency_iri "http://example.com/competencies/programming/tcl" \
+ -charge_numerator 90
# Moreover, you probably know a bit of database design as well (50%)
::xolp::Activity add_to_competency \
- -activity_iri "http://example.com/openacs-exam" \
- -competency_iri "http://example.com/competencies/database-design" \
- -charge_numerator 50
+ -activity_iri "http://example.com/openacs-exam" \
+ -competency_iri "http://example.com/competencies/database-design" \
+ -charge_numerator 50
::xolp::Activity synchronize_competencies -activity_iri "http://example.com/tcl-exam"
::xolp::Activity synchronize_competencies -activity_iri "http://example.com/openacs-exam"
set evaluation_schema_id [::xolp::EvaluationSchema require \
- -iri "http://example.com/evaluation-schemas/programming" \
- -return id \
- -title "Development Skills" \
- -level_names {"luser" "junior" "senior" "ninja"} \
- -positive_threshold_index 1]
+ -iri "http://example.com/evaluation-schemas/programming" \
+ -return id \
+ -title "Development Skills" \
+ -level_names {"luser" "junior" "senior" "ninja"} \
+ -positive_threshold_index 1]
set evaluation_scale [::xolp::EvaluationScale require \
- -iri "http://example.com/evaluation-scales/programming" \
- -evalschema_id $evaluation_schema_id \
- -title "luser - 25 - junior - 50 - senior - 75 - ninja" \
- -thresholds { 25 50 75 }]
+ -iri "http://example.com/evaluation-scales/programming" \
+ -evalschema_id $evaluation_schema_id \
+ -title "luser - 25 - junior - 50 - senior - 75 - ninja" \
+ -thresholds { 25 50 75 }]
$evaluation_scale add_to_competency \
-competency_iri "http://example.com/competencies/programming/tcl"
@@ -601,7 +601,7 @@
$evaluation_scale add_to_competency \
-competency_iri "http://example.com/competencies/abstract-thinking"
} {
- # Delete stuff
+ # Delete stuff
}
##################
@@ -614,608 +614,608 @@
-procs {::xolp::ActivityVerb} \
-cats {smoke} \
activity_verb_create {
- Create an Activity Verb.
+ Create an Activity Verb.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component activity_verb_create
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component activity_verb_create
+ }
}
aa_register_case \
-procs {::xolp::ActivityVerb} \
-cats {smoke} \
activity_verb_require {
- Require an Activity Verb.
+ Require an Activity Verb.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component activity_verb_require
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component activity_verb_require
+ }
}
aa_register_case \
-procs {::xolp::EvaluationSchema} \
-cats {smoke} \
activity_verb_delete {
- Delete an Activity Verb.
+ Delete an Activity Verb.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component activity_verb_create
- aa_call_component activity_verb_delete
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component activity_verb_create
+ aa_call_component activity_verb_delete
+ }
}
aa_register_case \
-procs {::xolp::EvaluationSchema} \
-cats {smoke} \
evaluation_schema_create {
- Create an Evaluation Schema.
+ Create an Evaluation Schema.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component evaluation_schema_create
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component evaluation_schema_create
+ }
}
aa_register_case \
-procs {::xolp::EvaluationSchema} \
-cats {smoke} \
evaluation_schema_require {
- Require an Evaluation Schema.
+ Require an Evaluation Schema.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component evaluation_schema_require
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component evaluation_schema_require
+ }
}
aa_register_case \
-procs {::xolp::EvaluationSchema} \
-cats {smoke} \
evaluation_schema_delete {
- Delete an Evaluation Schema.
+ Delete an Evaluation Schema.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component evaluation_schema_create
- aa_call_component evaluation_schema_delete
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component evaluation_schema_create
+ aa_call_component evaluation_schema_delete
+ }
}
aa_register_case \
-procs {::xolp::EvaluationScale} \
-cats {smoke} \
evaluation_scale_create {
- Create an Evaluation Scale.
+ Create an Evaluation Scale.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component evaluation_schema_create
- aa_call_component evaluation_scale_create
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component evaluation_schema_create
+ aa_call_component evaluation_scale_create
+ }
}
aa_register_case \
-procs {::xolp::EvaluationScale} \
-cats {smoke} \
evaluation_scale_require {
- Require an Evaluation Scale.
+ Require an Evaluation Scale.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component evaluation_scale_require
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component evaluation_scale_require
+ }
}
aa_register_case \
-procs {::xolp::EvaluationScale} \
-cats {smoke} \
evaluation_scale_delete {
- Delete an Evaluation Scale.
+ Delete an Evaluation Scale.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component evaluation_schema_create
- aa_call_component evaluation_scale_create
- aa_call_component evaluation_scale_delete
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component evaluation_schema_create
+ aa_call_component evaluation_scale_create
+ aa_call_component evaluation_scale_delete
+ }
}
aa_register_case \
-procs {::xolp::EvaluationScale} \
-cats {api} \
evaluation_scale_levels {
- Correctness of Levels of an Evaluation Scale.
+ Correctness of Levels of an Evaluation Scale.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component evaluation_schema_create
- aa_call_component evaluation_scale_create
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component evaluation_schema_create
+ aa_call_component evaluation_scale_create
- set levels [$evaluation_scale levels]
- set lowest_level [lindex $levels 0]
- set highest_level [lindex $levels end]
- set medium_level [$evaluation_scale get_level -result 75]
- aa_equals "5 levels?" [llength $levels] 5
- aa_equals "Lowest level min 0?" [$lowest_level min] 0
- aa_equals "Lowest level max 60?" [$lowest_level max] 60
- aa_equals "Lowest level height 0?" [$lowest_level height] 0
- aa_equals "Medium level min 70?" [$medium_level min] 70
- aa_equals "Medium level max 80?" [$medium_level max] 80
- aa_equals "Medium level height 2?" [$medium_level height] 2
- aa_equals "Highest level min 90?" [$highest_level min] 90
- aa_equals "Highest level max 100?" [$highest_level max] 100
- aa_equals "Highest level height 4?" [$highest_level height] 4
+ set levels [$evaluation_scale levels]
+ set lowest_level [lindex $levels 0]
+ set highest_level [lindex $levels end]
+ set medium_level [$evaluation_scale get_level -result 75]
+ aa_equals "5 levels?" [llength $levels] 5
+ aa_equals "Lowest level min 0?" [$lowest_level min] 0
+ aa_equals "Lowest level max 60?" [$lowest_level max] 60
+ aa_equals "Lowest level height 0?" [$lowest_level height] 0
+ aa_equals "Medium level min 70?" [$medium_level min] 70
+ aa_equals "Medium level max 80?" [$medium_level max] 80
+ aa_equals "Medium level height 2?" [$medium_level height] 2
+ aa_equals "Highest level min 90?" [$highest_level min] 90
+ aa_equals "Highest level max 100?" [$highest_level max] 100
+ aa_equals "Highest level height 4?" [$highest_level height] 4
- aa_true "Is 0 negative?" {[$lowest_level encompasses -result 0]}
- aa_true "Is 59.9 negative?" {[$lowest_level encompasses -result 59.9]}
- aa_true "Is 70 satisfactory?" {[$medium_level encompasses -result 70]}
- aa_true "Is 75 satisfactory?" {[$medium_level encompasses -result 75]}
- aa_false "Is 80 better than satisfactory?" {[$medium_level encompasses -result 80]}
- aa_true "Is 90 excellent?" {[$highest_level encompasses -result 90]}
- aa_true "Is 100 excellent?" {[$highest_level encompasses -result 100]}
- aa_false "Is 101 invalid?" {[$highest_level encompasses -result 100.1]}
- }
+ aa_true "Is 0 negative?" {[$lowest_level encompasses -result 0]}
+ aa_true "Is 59.9 negative?" {[$lowest_level encompasses -result 59.9]}
+ aa_true "Is 70 satisfactory?" {[$medium_level encompasses -result 70]}
+ aa_true "Is 75 satisfactory?" {[$medium_level encompasses -result 75]}
+ aa_false "Is 80 better than satisfactory?" {[$medium_level encompasses -result 80]}
+ aa_true "Is 90 excellent?" {[$highest_level encompasses -result 90]}
+ aa_true "Is 100 excellent?" {[$highest_level encompasses -result 100]}
+ aa_false "Is 101 invalid?" {[$highest_level encompasses -result 100.1]}
+ }
}
aa_register_case \
-procs {::xolp::Activity} \
-cats {smoke} \
activity_create {
- Register an activity for the first time in the activity dimension.
+ Register an activity for the first time in the activity dimension.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component activity_create
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component activity_create
+ }
}
aa_register_case \
-procs {::xolp::Activity} \
-cats {smoke} \
activity_update {
- Update activity in the activity dimension.
+ Update activity in the activity dimension.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component activity_create
- aa_call_component activity_update
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component activity_create
+ aa_call_component activity_update
+ }
}
aa_register_case \
-procs {::xolp::Activity} \
-cats {smoke} \
activity_require {
- Require activity in the activity dimension.
+ Require activity in the activity dimension.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component activity_require
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component activity_require
+ }
}
aa_register_case \
-procs {::xolp::Activity} \
-cats {smoke} \
activity_delete {
- Delete activity in the activity dimension.
+ Delete activity in the activity dimension.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component activity_create
- aa_call_component activity_delete
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component activity_create
+ aa_call_component activity_delete
+ }
}
aa_register_case \
-procs {::xolp::Indicator ::xolp::Activity} \
-cats {smoke} \
indicator_create {
- Create one simple indicator.
+ Create one simple indicator.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component activity_create
- aa_call_component indicator_create_simple
- aa_call_component indicator_create_full
- aa_call_component indicator_create_bad
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component activity_create
+ aa_call_component indicator_create_simple
+ aa_call_component indicator_create_full
+ aa_call_component indicator_create_bad
+ }
}
aa_register_case \
-procs {::xolp::Indicator} \
-cats {smoke} \
indicator_update {
- Update one simple indicator.
+ Update one simple indicator.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component activity_create
- aa_call_component indicator_create_full
- aa_call_component indicator_update
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component activity_create
+ aa_call_component indicator_create_full
+ aa_call_component indicator_update
+ }
}
aa_register_case \
-procs {::xolp::Indicator} \
-cats {smoke} \
indicator_delete {
- Delete one simple indicator.
+ Delete one simple indicator.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- aa_call_component activity_create
- aa_call_component indicator_create_simple
- aa_call_component indicator_delete
- aa_call_component activity_delete
- }
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ aa_call_component activity_create
+ aa_call_component indicator_create_simple
+ aa_call_component indicator_delete
+ aa_call_component activity_delete
+ }
}
aa_register_case \
-init_classes {test_data_populate} \
-cats {api} \
indicator_verb_queries {
- Query indicators based on verbs.
+ Query indicators based on verbs.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids [ad_conn user_id] \
- -activity_iris $activity_iris \
- -activity_verb_iris {"xolp:test:v:competed"}]
- aa_log $li
- aa_equals "Number of indicators:" [llength [dict keys $li]] 3
- aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 150.0
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids [ad_conn user_id] \
+ -activity_iris $activity_iris \
+ -activity_verb_iris {"xolp:test:v:competed"}]
+ aa_log $li
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 3
+ aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 150.0
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids [ad_conn user_id] \
- -activity_iris $activity_iris \
- -activity_verb_iris {"xolp:test:v:practiced"}]
- aa_log $li
- aa_equals "Number of indicators:" [llength [dict keys $li]] 4
- aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 145.0
- }
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids [ad_conn user_id] \
+ -activity_iris $activity_iris \
+ -activity_verb_iris {"xolp:test:v:practiced"}]
+ aa_log $li
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 4
+ aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 145.0
+ }
}
aa_register_case \
-cats {api} \
indicator_datetime_queries {
- Query indicators based on time.
+ Query indicators based on time.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
- # Assumption: Aggregations of the activity hierarchy do
- # not fit well to time-queries, because
- # questions like "What mark would you have
- # if you had been only attending the course
- # on Mondays" doesn't make too much
- # sense. However, the average result on
- # weekends in comparison to weekdays might
- # be interesting.
+ # Assumption: Aggregations of the activity hierarchy do
+ # not fit well to time-queries, because
+ # questions like "What mark would you have
+ # if you had been only attending the course
+ # on Mondays" doesn't make too much
+ # sense. However, the average result on
+ # weekends in comparison to weekdays might
+ # be interesting.
- set activity_iri "http://example.com/practice1"
- set activity_version_id [::xolp::Activity require -iri $activity_iri -return id]
+ set activity_iri "http://example.com/practice1"
+ set activity_version_id [::xolp::Activity require -iri $activity_iri -return id]
- # Weekend practicing
- ::xolp::Indicator insert \
- -activity_version_id $activity_version_id \
- -end_timestamp "2016-12-31 23:00:00" \
- -result_numerator 40
- ::xolp::Indicator insert \
- -activity_version_id $activity_version_id \
- -end_timestamp "2017-01-01 01:00:00" \
- -result_numerator 48
+ # Weekend practicing
+ ::xolp::Indicator insert \
+ -activity_version_id $activity_version_id \
+ -end_timestamp "2016-12-31 23:00:00" \
+ -result_numerator 40
+ ::xolp::Indicator insert \
+ -activity_version_id $activity_version_id \
+ -end_timestamp "2017-01-01 01:00:00" \
+ -result_numerator 48
- # Weekday practicing
- ::xolp::Indicator insert \
- -activity_version_id $activity_version_id \
- -end_timestamp "2017-01-02 11:30:00" \
- -result_numerator 60
- ::xolp::Indicator insert \
- -activity_version_id $activity_version_id \
- -end_timestamp "2017-01-02 13:15:00" \
- -result_numerator 68
+ # Weekday practicing
+ ::xolp::Indicator insert \
+ -activity_version_id $activity_version_id \
+ -end_timestamp "2017-01-02 11:30:00" \
+ -result_numerator 60
+ ::xolp::Indicator insert \
+ -activity_version_id $activity_version_id \
+ -end_timestamp "2017-01-02 13:15:00" \
+ -result_numerator 68
- # Weekend 2016
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids [ad_conn user_id] \
- -activity_iris $activity_iri \
- -begin_date_constraint "begin_year = '2016'" \
- -end_date_constraint "end_is_weekend = TRUE" ]
- aa_log $li
- aa_equals "Number of indicators:" [llength [dict keys $li]] 1
- aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 40.0
+ # Weekend 2016
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids [ad_conn user_id] \
+ -activity_iris $activity_iri \
+ -begin_date_constraint "begin_year = '2016'" \
+ -end_date_constraint "end_is_weekend = TRUE" ]
+ aa_log $li
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 1
+ aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 40.0
- # Weekend
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids [ad_conn user_id] \
- -activity_iris $activity_iri \
- -end_date_constraint "end_is_weekend = TRUE" ]
- aa_log $li
- aa_equals "Number of indicators:" [llength [dict keys $li]] 2
- aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 88.0
+ # Weekend
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids [ad_conn user_id] \
+ -activity_iris $activity_iri \
+ -end_date_constraint "end_is_weekend = TRUE" ]
+ aa_log $li
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 2
+ aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 88.0
- # AM
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids [ad_conn user_id] \
- -activity_iris $activity_iri \
- -end_time_constraint "end_day_time_name = 'am'" ]
- aa_log $li
- aa_equals "Number of indicators:" [llength [dict keys $li]] 1
- aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 60.0
+ # AM
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids [ad_conn user_id] \
+ -activity_iris $activity_iri \
+ -end_time_constraint "end_day_time_name = 'am'" ]
+ aa_log $li
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 1
+ aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 60.0
- # Total
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids [ad_conn user_id] \
- -activity_iris $activity_iri]
- aa_log $li
- aa_equals "Number of indicators:" [llength [dict keys $li]] 4
- aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 216.0
- }
+ # Total
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids [ad_conn user_id] \
+ -activity_iris $activity_iri]
+ aa_log $li
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 4
+ aa_equals "Sum of indicators:" [::tcl::mathop::+ {*}[dict values $li]] 216.0
+ }
}
aa_register_case \
-cats {api} \
scenario_composite_activity {
- Register several indicators for several activities that form a composite.
+ Register several indicators for several activities that form a composite.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- lassign [list [ad_conn user_id] {*}[::xolp::test::create_test_users -nr 5]] u1 u2 u3 u4 u5 u6
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ lassign [list [ad_conn user_id] {*}[::xolp::test::create_test_users -nr 5]] u1 u2 u3 u4 u5 u6
- # Setup the course, add schema and scale.
- set c1 [::xolp::Activity require -iri "http://example.com/course1" -return id]
- set evalschema_id [::xolp::EvaluationSchema require -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" -update false -return id]
- set evalscale [::xolp::EvaluationScale require -iri "http://example.com/evalscales/course1" -evalschema_id $evalschema_id -thresholds "60 70 80 90"]
- $evalscale add_to_activity -activity_version_id $c1
+ # Setup the course, add schema and scale.
+ set c1 [::xolp::Activity require -iri "http://example.com/course1" -return id]
+ set evalschema_id [::xolp::EvaluationSchema require -iri "https://dotlrn.org/xolp/evaluation-schemas/at-five-to-one" -update false -return id]
+ set evalscale [::xolp::EvaluationScale require -iri "http://example.com/evalscales/course1" -evalschema_id $evalschema_id -thresholds "60 70 80 90"]
+ $evalscale add_to_activity -activity_version_id $c1
- set c1t1 [::xolp::Activity require -iri "http://example.com/course1/test1" -return id]
- set c1t2 [::xolp::Activity require -iri "http://example.com/course1/test2" -return id]
+ set c1t1 [::xolp::Activity require -iri "http://example.com/course1/test1" -return id]
+ set c1t2 [::xolp::Activity require -iri "http://example.com/course1/test2" -return id]
- # The final test performance counts 50% overall.
- ::xolp::Activity add_to_context \
- -activity_iri "http://example.com/course1/test1" \
- -context_iri "http://example.com/course1" \
- -check false \
- -weight_numerator 25 \
- -weight_denominator 100
- ::xolp::Activity add_to_context \
- -activity_iri "http://example.com/course1/test2" \
- -context_iri "http://example.com/course1" \
- -check false \
- -weight_numerator 50 \
- -weight_denominator 100
+ # The final test performance counts 50% overall.
+ ::xolp::Activity add_to_context \
+ -activity_iri "http://example.com/course1/test1" \
+ -context_iri "http://example.com/course1" \
+ -check false \
+ -weight_numerator 25 \
+ -weight_denominator 100
+ ::xolp::Activity add_to_context \
+ -activity_iri "http://example.com/course1/test2" \
+ -context_iri "http://example.com/course1" \
+ -check false \
+ -weight_numerator 50 \
+ -weight_denominator 100
- # We create a virtual "groups" context to collect all (alternative) groups.
- # This allows for easier weighting (otherwise course1's subactivities would add up to more than 100%
- set c1g [::xolp::Activity require -iri "http://example.com/course1/groups" -return id]
- ::xolp::Activity add_to_context \
- -activity_iri "http://example.com/course1/groups" \
- -context_iri "http://example.com/course1" \
- -weight_numerator 25 \
- -weight_denominator 100
+ # We create a virtual "groups" context to collect all (alternative) groups.
+ # This allows for easier weighting (otherwise course1's subactivities would add up to more than 100%
+ set c1g [::xolp::Activity require -iri "http://example.com/course1/groups" -return id]
+ ::xolp::Activity add_to_context \
+ -activity_iri "http://example.com/course1/groups" \
+ -context_iri "http://example.com/course1" \
+ -weight_numerator 25 \
+ -weight_denominator 100
- # We create the alternative groups and their tasks.
- set c1g1 [::xolp::Activity require -iri "http://example.com/course1/group1" -return id]
- set c1g1p1 [::xolp::Activity require -iri "http://example.com/course1/group1/presentation1" -return id]
- set c1g1p2 [::xolp::Activity require -iri "http://example.com/course1/group1/presentation2" -return id]
- set c1g2 [::xolp::Activity require -iri "http://example.com/course1/group2" -return id]
- set c1g2d [::xolp::Activity require -iri "http://example.com/course1/group2/deliverable" -return id]
- set c1g2p [::xolp::Activity require -iri "http://example.com/course1/group2/presentation" -return id]
+ # We create the alternative groups and their tasks.
+ set c1g1 [::xolp::Activity require -iri "http://example.com/course1/group1" -return id]
+ set c1g1p1 [::xolp::Activity require -iri "http://example.com/course1/group1/presentation1" -return id]
+ set c1g1p2 [::xolp::Activity require -iri "http://example.com/course1/group1/presentation2" -return id]
+ set c1g2 [::xolp::Activity require -iri "http://example.com/course1/group2" -return id]
+ set c1g2d [::xolp::Activity require -iri "http://example.com/course1/group2/deliverable" -return id]
+ set c1g2p [::xolp::Activity require -iri "http://example.com/course1/group2/presentation" -return id]
- # The first presentation of each group counts not as much as the second one.
- ::xolp::Activity add_to_context \
- -activity_iri "http://example.com/course1/group1/presentation1" \
- -context_iri "http://example.com/course1/group1" \
- -check false \
- -weight_numerator 4 \
- -weight_denominator 10
- ::xolp::Activity add_to_context \
- -activity_iri "http://example.com/course1/group1/presentation2" \
- -context_iri "http://example.com/course1/group1" \
- -weight_numerator 6 \
- -weight_denominator 10
- ::xolp::Activity add_to_context \
- -activity_iri "http://example.com/course1/group2/presentation" \
- -context_iri "http://example.com/course1/group2" \
- -check false \
- -weight_numerator 4 \
- -weight_denominator 10
- ::xolp::Activity add_to_context \
- -activity_iri "http://example.com/course1/group2/deliverable" \
- -context_iri "http://example.com/course1/group2" \
- -weight_numerator 6 \
- -weight_denominator 10
+ # The first presentation of each group counts not as much as the second one.
+ ::xolp::Activity add_to_context \
+ -activity_iri "http://example.com/course1/group1/presentation1" \
+ -context_iri "http://example.com/course1/group1" \
+ -check false \
+ -weight_numerator 4 \
+ -weight_denominator 10
+ ::xolp::Activity add_to_context \
+ -activity_iri "http://example.com/course1/group1/presentation2" \
+ -context_iri "http://example.com/course1/group1" \
+ -weight_numerator 6 \
+ -weight_denominator 10
+ ::xolp::Activity add_to_context \
+ -activity_iri "http://example.com/course1/group2/presentation" \
+ -context_iri "http://example.com/course1/group2" \
+ -check false \
+ -weight_numerator 4 \
+ -weight_denominator 10
+ ::xolp::Activity add_to_context \
+ -activity_iri "http://example.com/course1/group2/deliverable" \
+ -context_iri "http://example.com/course1/group2" \
+ -weight_numerator 6 \
+ -weight_denominator 10
- # The groups performance, as well as the first test, count only 25% of the overall course mark.
- ::xolp::Activity add_to_context \
- -activity_iri "http://example.com/course1/group1" \
- -context_iri "http://example.com/course1/groups" \
- -check false \
- -weight_numerator 100 \
- -weight_denominator 100
- ::xolp::Activity add_to_context \
- -activity_iri "http://example.com/course1/group2" \
- -context_iri "http://example.com/course1/groups" \
- -check false \
- -weight_numerator 100 \
- -weight_denominator 100
+ # The groups performance, as well as the first test, count only 25% of the overall course mark.
+ ::xolp::Activity add_to_context \
+ -activity_iri "http://example.com/course1/group1" \
+ -context_iri "http://example.com/course1/groups" \
+ -check false \
+ -weight_numerator 100 \
+ -weight_denominator 100
+ ::xolp::Activity add_to_context \
+ -activity_iri "http://example.com/course1/group2" \
+ -context_iri "http://example.com/course1/groups" \
+ -check false \
+ -weight_numerator 100 \
+ -weight_denominator 100
- # User 1
- ::xolp::Indicator insert \
- -user_id $u1 \
- -activity_version_id $c1g1p1 \
- -result_numerator 25
- ::xolp::Indicator insert \
- -user_id $u1 \
- -activity_version_id $c1g1p2 \
- -result_numerator 75
- ::xolp::Indicator insert \
- -user_id $u1 \
- -activity_version_id $c1t1 \
- -result_numerator 60
- ::xolp::Indicator insert \
- -user_id $u1 \
- -activity_version_id $c1t2 \
- -result_numerator 90
+ # User 1
+ ::xolp::Indicator insert \
+ -user_id $u1 \
+ -activity_version_id $c1g1p1 \
+ -result_numerator 25
+ ::xolp::Indicator insert \
+ -user_id $u1 \
+ -activity_version_id $c1g1p2 \
+ -result_numerator 75
+ ::xolp::Indicator insert \
+ -user_id $u1 \
+ -activity_version_id $c1t1 \
+ -result_numerator 60
+ ::xolp::Indicator insert \
+ -user_id $u1 \
+ -activity_version_id $c1t2 \
+ -result_numerator 90
- # User 2
- ::xolp::Indicator insert \
- -user_id $u2 \
- -activity_version_id $c1g1p1 \
- -result_numerator 23
- ::xolp::Indicator insert \
- -user_id $u2 \
- -activity_version_id $c1g1p2 \
- -result_numerator 43
- ::xolp::Indicator insert \
- -user_id $u2 \
- -activity_version_id $c1t1 \
- -result_numerator 48
- ::xolp::Indicator insert \
- -user_id $u2 \
- -activity_version_id $c1t2 \
- -result_numerator 65
+ # User 2
+ ::xolp::Indicator insert \
+ -user_id $u2 \
+ -activity_version_id $c1g1p1 \
+ -result_numerator 23
+ ::xolp::Indicator insert \
+ -user_id $u2 \
+ -activity_version_id $c1g1p2 \
+ -result_numerator 43
+ ::xolp::Indicator insert \
+ -user_id $u2 \
+ -activity_version_id $c1t1 \
+ -result_numerator 48
+ ::xolp::Indicator insert \
+ -user_id $u2 \
+ -activity_version_id $c1t2 \
+ -result_numerator 65
- # User 3 - Did nothing
+ # User 3 - Did nothing
- # User 4 - Failed on first test, thus failed completely
- ::xolp::Indicator insert \
- -user_id $u4 \
- -activity_version_id $c1t1 \
- -result_numerator 3
- ::xolp::Indicator insert \
- -user_id $u4 \
- -activity_version_id $c1g2d \
- -result_numerator 100
- ::xolp::Indicator insert \
- -user_id $u4 \
- -activity_version_id $c1g2p \
- -result_numerator 90
- ::xolp::Indicator insert \
- -user_id $u4 \
- -activity_version_id $c1t2 \
- -result_numerator 99
+ # User 4 - Failed on first test, thus failed completely
+ ::xolp::Indicator insert \
+ -user_id $u4 \
+ -activity_version_id $c1t1 \
+ -result_numerator 3
+ ::xolp::Indicator insert \
+ -user_id $u4 \
+ -activity_version_id $c1g2d \
+ -result_numerator 100
+ ::xolp::Indicator insert \
+ -user_id $u4 \
+ -activity_version_id $c1g2p \
+ -result_numerator 90
+ ::xolp::Indicator insert \
+ -user_id $u4 \
+ -activity_version_id $c1t2 \
+ -result_numerator 99
- # User 1 on Presentation 1
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids $u1 \
- -activity_iris "http://example.com/course1/group1/presentation1"]
- aa_equals "Number of indicators:" [llength [dict keys $li]] 1
- aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 25
+ # User 1 on Presentation 1
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids $u1 \
+ -activity_iris "http://example.com/course1/group1/presentation1"]
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 1
+ aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 25
- aa_equals "User 1 in test 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/test1"] 60.00
- aa_equals "User 1 in test 2:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/test2"] 90.00
- aa_equals "User 1 in group 1 presentation 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1/presentation1"] 25.00
- aa_equals "User 1 in group 1 presentation 2:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1/presentation2"] 75.00
- aa_equals "User 1 in group 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1"] 55.00
- aa_equals "User 1 in virtual group:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/groups"] 55.00
- aa_equals "User 1 in course 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1"] 73.75
+ aa_equals "User 1 in test 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/test1"] 60.00
+ aa_equals "User 1 in test 2:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/test2"] 90.00
+ aa_equals "User 1 in group 1 presentation 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1/presentation1"] 25.00
+ aa_equals "User 1 in group 1 presentation 2:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1/presentation2"] 75.00
+ aa_equals "User 1 in group 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/group1"] 55.00
+ aa_equals "User 1 in virtual group:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1/groups"] 55.00
+ aa_equals "User 1 in course 1:" [::xolp::User get_result -user_id $u1 -iri "http://example.com/course1"] 73.75
- aa_equals "User 2 in group 1 test 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/test1"] 48.00
- aa_equals "User 2 in group 1 test 2:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/test2"] 65.00
- aa_equals "User 2 in group 1 presentation 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1/presentation1"] 23.00
- aa_equals "User 2 in group 1 presentation 2:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1/presentation2"] 43.00
- aa_equals "User 2 in group 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1"] 35.00
- aa_equals "User 2 in virtual group:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/groups"] 35.00
- aa_equals "User 2 in course 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1"] 53.25
+ aa_equals "User 2 in group 1 test 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/test1"] 48.00
+ aa_equals "User 2 in group 1 test 2:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/test2"] 65.00
+ aa_equals "User 2 in group 1 presentation 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1/presentation1"] 23.00
+ aa_equals "User 2 in group 1 presentation 2:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1/presentation2"] 43.00
+ aa_equals "User 2 in group 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/group1"] 35.00
+ aa_equals "User 2 in virtual group:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1/groups"] 35.00
+ aa_equals "User 2 in course 1:" [::xolp::User get_result -user_id $u2 -iri "http://example.com/course1"] 53.25
- # User 1 on Group 1
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids $u1 \
- -activity_iris "http://example.com/course1/group1"]
- aa_equals "Number of indicators:" [llength [dict keys $li]] 2
- aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 100
+ # User 1 on Group 1
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids $u1 \
+ -activity_iris "http://example.com/course1/group1"]
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 2
+ aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 100
- # User 2 on Group 1
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids $u2 \
- -activity_iris "http://example.com/course1/group1"]
- aa_equals "Number of indicators:" [llength [dict keys $li]] 2
- aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 66
+ # User 2 on Group 1
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids $u2 \
+ -activity_iris "http://example.com/course1/group1"]
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 2
+ aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 66
- # User 3 on Group 1 (absent)
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids $u3 \
- -activity_iris "http://example.com/course1/group1"]
- aa_equals "Number of indicators:" [llength [dict keys $li]] 0
- aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 0
+ # User 3 on Group 1 (absent)
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids $u3 \
+ -activity_iris "http://example.com/course1/group1"]
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 0
+ aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 0
- # User 1 on whole course
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids $u1 \
- -activity_iris "http://example.com/course1"]
- aa_equals "Number of indicators:" [llength [dict keys $li]] 4
- aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 250
+ # User 1 on whole course
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids $u1 \
+ -activity_iris "http://example.com/course1"]
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 4
+ aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 250
- # User 2 on whole course
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids $u2 \
- -activity_iris "http://example.com/course1"]
- aa_equals "Number of indicators:" [llength [dict keys $li]] 4
- aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 179
+ # User 2 on whole course
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids $u2 \
+ -activity_iris "http://example.com/course1"]
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 4
+ aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 179
- # User 3 on whole course
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids $u3 \
- -activity_iris "http://example.com/course1"]
- aa_equals "Number of indicators:" [llength [dict keys $li]] 0
- aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 0
+ # User 3 on whole course
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids $u3 \
+ -activity_iris "http://example.com/course1"]
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 0
+ aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 0
- # User 4 on whole course
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids $u4 \
- -activity_iris "http://example.com/course1"]
- aa_equals "Number of indicators:" [llength [dict keys $li]] 4
- aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 292
+ # User 4 on whole course
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids $u4 \
+ -activity_iris "http://example.com/course1"]
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 4
+ aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 292
- }
+ }
}
aa_register_case \
-procs {::xolp::Activity} \
-cats {populator stress} \
populate_activities {
- Generate 10,000 activities.
+ Generate 10,000 activities.
} {
aa_run_with_teardown \
-rollback \
@@ -1225,8 +1225,8 @@
for {set i 1} {$i <= $amount} {incr i} {
set activity_iri [::xolp::test::create_test_iris]
set activity [::xolp::Activity new_persistent_object \
- -iri $activity_iri \
- -title "Activity $i"]
+ -iri $activity_iri \
+ -title "Activity $i"]
lappend activity_version_ids [$activity activity_version_id]
lappend activity_iris $activity_iri
}
@@ -1237,8 +1237,8 @@
-procs {::xolp::Indicator} \
-cats {populator stress} \
populate_indicators {
- Generate 250,000 random indicators for 5,000 users
- and 5000 activities.
+ Generate 250,000 random indicators for 5,000 users
+ and 5000 activities.
} {
aa_run_with_teardown \
-rollback \
@@ -1256,13 +1256,13 @@
set end_timestamp [::xolp::test::random_timestamp]
set begin_timestamp [::xolp::test::random_earlier_timestamp $end_timestamp]
::xolp::Indicator insert \
- -user_id $user_id \
- -activity_verb_id $activity_verb_id \
- -activity_version_id $activity_version_id \
- -begin_timestamp $begin_timestamp \
- -end_timestamp $end_timestamp \
- -result_numerator [expr {int(rand()*100)}] \
- -result_denominator 100
+ -user_id $user_id \
+ -activity_verb_id $activity_verb_id \
+ -activity_version_id $activity_version_id \
+ -begin_timestamp $begin_timestamp \
+ -end_timestamp $end_timestamp \
+ -result_numerator [expr {int(rand()*100)}] \
+ -result_denominator 100
}
}
}
@@ -1271,148 +1271,148 @@
-init_classes {test_data_populate} \
-cats {api} \
user_get_composite_activity_result {
- Get result a user gained in a context (for example a community/course).
+ Get result a user gained in a context (for example a community/course).
} {
- aa_run_with_teardown \
- -test_code {
- set result [::xolp::User get_result \
- -user_id [lindex $user_ids 0] \
- -iri [lindex $context_iris 0] \
- -policy best]
- aa_true "Best result: expected 41.00% got $result" {[format "%.2f" $result] == 41.00}
+ aa_run_with_teardown \
+ -test_code {
+ set result [::xolp::User get_result \
+ -user_id [lindex $user_ids 0] \
+ -iri [lindex $context_iris 0] \
+ -policy best]
+ aa_true "Best result: expected 41.00% got $result" {[format "%.2f" $result] == 41.00}
- set result [::xolp::User get_result \
- -user_id [lindex $user_ids 0] \
- -iri [lindex $context_iris 0] \
- -policy worst]
- aa_true "Worst result: expected 18.44% got $result" {[format "%.2f" $result] == 18.44}
+ set result [::xolp::User get_result \
+ -user_id [lindex $user_ids 0] \
+ -iri [lindex $context_iris 0] \
+ -policy worst]
+ aa_true "Worst result: expected 18.44% got $result" {[format "%.2f" $result] == 18.44}
- set result [::xolp::User get_result \
- -user_id [lindex $user_ids 0] \
- -iri [lindex $context_iris 0] \
- -policy average]
- aa_true "Average result: expected 28.33% got $result" {[format "%.2f" $result] == 28.33}
+ set result [::xolp::User get_result \
+ -user_id [lindex $user_ids 0] \
+ -iri [lindex $context_iris 0] \
+ -policy average]
+ aa_true "Average result: expected 28.33% got $result" {[format "%.2f" $result] == 28.33}
- set result [::xolp::User get_result \
- -user_id [lindex $user_ids 1] \
- -iri [lindex $context_iris 1]]
- aa_true "Best result: expected 87% got $result" {$result == 87}
- }
+ set result [::xolp::User get_result \
+ -user_id [lindex $user_ids 1] \
+ -iri [lindex $context_iris 1]]
+ aa_true "Best result: expected 87% got $result" {$result == 87}
+ }
}
aa_register_case \
-init_classes {test_data_populate} \
-cats {api} \
user_get_result {
- Get result of a user.
+ Get result of a user.
} {
- aa_run_with_teardown \
- -test_code {
- set result [::xolp::User get_result \
- -user_id [lindex $user_ids 1] \
- -iri [lindex $activity_iris 0] \
- -policy best]
- aa_log "Result: $result"
- aa_true "User didn't do this activity" {$result eq ""}
+ aa_run_with_teardown \
+ -test_code {
+ set result [::xolp::User get_result \
+ -user_id [lindex $user_ids 1] \
+ -iri [lindex $activity_iris 0] \
+ -policy best]
+ aa_log "Result: $result"
+ aa_true "User didn't do this activity" {$result eq ""}
- set result [::xolp::User get_result \
- -user_id [lindex $user_ids 0] \
- -iri [lindex $activity_iris 0] \
- -policy best]
- aa_log "Result: $result"
- aa_true "Best result is 100%" {$result == 100}
+ set result [::xolp::User get_result \
+ -user_id [lindex $user_ids 0] \
+ -iri [lindex $activity_iris 0] \
+ -policy best]
+ aa_log "Result: $result"
+ aa_true "Best result is 100%" {$result == 100}
- set result [::xolp::User get_result \
- -user_id [lindex $user_ids 0] \
- -iri [lindex $activity_iris 0] \
- -policy average]
- aa_log "Result: $result"
- aa_true "Average result is 62.5%" {$result == 62.5}
+ set result [::xolp::User get_result \
+ -user_id [lindex $user_ids 0] \
+ -iri [lindex $activity_iris 0] \
+ -policy average]
+ aa_log "Result: $result"
+ aa_true "Average result is 62.5%" {$result == 62.5}
- set result [::xolp::User get_result \
- -user_id [lindex $user_ids 0] \
- -iri [lindex $activity_iris 0] \
- -policy worst]
+ set result [::xolp::User get_result \
+ -user_id [lindex $user_ids 0] \
+ -iri [lindex $activity_iris 0] \
+ -policy worst]
- aa_log "Result: $result"
- aa_true "Worst result is ~33%" {[format "%.2f" $result] == 33.33}
- }
+ aa_log "Result: $result"
+ aa_true "Worst result is ~33%" {[format "%.2f" $result] == 33.33}
+ }
}
aa_register_case \
-init_classes {test_data_populate} \
-cats {api} \
indicator_get_duration {
- Get indicators duration...
+ Get indicators duration...
} {
- aa_run_with_teardown \
- -test_code {
- lassign $user_ids u1 u2
- lassign $activity_iris a1 a2 a3
- lassign $context_iris c1 c2 c3
+ aa_run_with_teardown \
+ -test_code {
+ lassign $user_ids u1 u2
+ lassign $activity_iris a1 a2 a3
+ lassign $context_iris c1 c2 c3
- set li [::xolp::Indicator get_values_from_db \
- -properties "duration" \
- -aggregate "sum" \
- -user_ids $u1 \
- -activity_iris $c1]
- aa_log $li
- aa_equals "Number of indicators:" [llength {*}[dict keys $li]] 7
- aa_equals "Sum of indicators:" [dict values $li] "06:15:00"
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "duration" \
+ -aggregate "sum" \
+ -user_ids $u1 \
+ -activity_iris $c1]
+ aa_log $li
+ aa_equals "Number of indicators:" [llength {*}[dict keys $li]] 7
+ aa_equals "Sum of indicators:" [dict values $li] "06:15:00"
- set li [::xolp::Indicator get_values_from_db \
- -properties "duration" \
- -aggregate "sum" \
- -user_ids $u1 \
- -activity_iris $a2]
- aa_log $li
- aa_equals "Number of indicators:" [llength [dict keys $li]] 1
- aa_equals "Sum of indicators:" [dict values $li] "01:45:00"
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "duration" \
+ -aggregate "sum" \
+ -user_ids $u1 \
+ -activity_iris $a2]
+ aa_log $li
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 1
+ aa_equals "Sum of indicators:" [dict values $li] "01:45:00"
- set li [::xolp::Indicator get_values_from_db \
- -properties "duration" \
- -aggregate "sum" \
- -user_ids $u2 \
- -activity_iris $c2]
- aa_log $li
- aa_equals "Number of indicators:" [llength {*}[dict keys $li]] 1
- aa_equals "Sum of indicators:" [dict values $li] "01:00:00"
- }
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "duration" \
+ -aggregate "sum" \
+ -user_ids $u2 \
+ -activity_iris $c2]
+ aa_log $li
+ aa_equals "Number of indicators:" [llength {*}[dict keys $li]] 1
+ aa_equals "Sum of indicators:" [dict values $li] "01:00:00"
+ }
}
aa_register_case \
-init_classes {test_data_populate} \
-cats {api} \
indicator_get_values {
- Get indicators values...
+ Get indicators values...
} {
- aa_run_with_teardown \
- -test_code {
- lassign $user_ids u1 u2
- lassign $activity_iris a1 a2 a3
- lassign $context_iris c1 c2 c3
+ aa_run_with_teardown \
+ -test_code {
+ lassign $user_ids u1 u2
+ lassign $activity_iris a1 a2 a3
+ lassign $context_iris c1 c2 c3
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids $u1 \
- -activity_iris $c1]
- aa_equals "Number of indicators:" [llength [dict keys $li]] 7
- aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 295
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids $u1 \
+ -activity_iris $c1]
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 7
+ aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 295
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids $u1 \
- -activity_iris $a2]
- aa_equals "Number of indicators:" [llength [dict keys $li]] 2
- aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 45
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids $u1 \
+ -activity_iris $a2]
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 2
+ aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 45
- set li [::xolp::Indicator get_values_from_db \
- -properties "result_percentage" \
- -user_ids $u2 \
- -activity_iris $c2]
- aa_equals "Number of indicators:" [llength [dict keys $li]] 1
- aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 87
- }
+ set li [::xolp::Indicator get_values_from_db \
+ -properties "result_percentage" \
+ -user_ids $u2 \
+ -activity_iris $c2]
+ aa_equals "Number of indicators:" [llength [dict keys $li]] 1
+ aa_equals "Sum of indicators:" [format "%.0f" [::tcl::mathop::+ {*}[dict values $li]]] 87
+ }
}
aa_register_case \
@@ -1424,158 +1424,165 @@
aa_run_with_teardown \
-rollback \
-test_code {
- ::xolp::Indicator insert \
- -user_id [ad_conn user_id] \
- -activity_version_id $exam1 \
- -result_numerator 90
+ ::xolp::Indicator insert \
+ -user_id [ad_conn user_id] \
+ -activity_version_id $exam1 \
+ -result_numerator 90
- ::xolp::Indicator insert \
- -user_id [ad_conn user_id] \
- -activity_version_id $exam2 \
- -result_numerator 80
+ ::xolp::Indicator insert \
+ -user_id [ad_conn user_id] \
+ -activity_version_id $exam2 \
+ -result_numerator 80
- set c [::xolp::User get_competencies -user_id [ad_conn user_id]]
- aa_equals "2 directly attached competencies." [llength [dict keys $c]] 2
- set c [::xolp::User get_competencies_recursive -user_id [ad_conn user_id]]
- aa_equals "6 competencies." [llength [dict keys $c]] 6
+ set c [::xolp::User get_competencies -user_id [ad_conn user_id]]
+ aa_equals "2 directly attached competencies." [llength [dict keys $c]] 2
+ set c [::xolp::User get_competencies_recursive -user_id [ad_conn user_id]]
+ aa_equals "6 competencies." [llength [dict keys $c]] 6
}
}
aa_register_case \
-init_classes {competency_test_data_populate} \
-cats {api} \
user_get_competency_evaluation {
- Get results/evaluations of users for competencies.
+ Get results/evaluations of users for competencies.
} {
- aa_run_with_teardown \
- -rollback \
- -test_code {
- ::xolp::Indicator insert \
- -user_id [ad_conn user_id] \
- -activity_version_id $exam1 \
- -result_numerator 90
+ aa_run_with_teardown \
+ -rollback \
+ -test_code {
+ ::xolp::Indicator insert \
+ -user_id [ad_conn user_id] \
+ -activity_version_id $exam1 \
+ -result_numerator 90
- ::xolp::Indicator insert \
- -user_id [ad_conn user_id] \
- -activity_version_id $exam2 \
- -result_numerator 80
+ ::xolp::Indicator insert \
+ -user_id [ad_conn user_id] \
+ -activity_version_id $exam2 \
+ -result_numerator 80
- #
- # Tcl
- #
- set result [::xolp::User get_competency_result \
- -user_id [ad_conn user_id] \
- -policy "best" \
- -competency_iri "http://example.com/competencies/programming/tcl"]
- aa_equals "User has 72% of competency 'Tcl Programming' (best)" $result 72.00
- set level [::xolp::User get_competency_evaluation \
- -user_id [ad_conn user_id] \
- -policy "best" \
- -competency_iri "http://example.com/competencies/programming/tcl"]
- aa_equals "User is a senior Tcl dev. (best)" [$level name] "senior"
+ #
+ # Tcl
+ #
+ set result [::xolp::User get_competency_result \
+ -user_id [ad_conn user_id] \
+ -policy "best" \
+ -competency_iri "http://example.com/competencies/programming/tcl"]
+ aa_equals "User has 72% of competency 'Tcl Programming' (best)" $result 72.00
+ set level [::xolp::User get_competency_evaluation \
+ -user_id [ad_conn user_id] \
+ -policy "best" \
+ -competency_iri "http://example.com/competencies/programming/tcl"]
+ aa_equals "User is a senior Tcl dev. (best)" [$level name] "senior"
- set result [::xolp::User get_competency_result \
- -user_id [ad_conn user_id] \
- -policy "average" \
- -competency_iri "http://example.com/competencies/programming/tcl"]
- aa_equals "User has 72% of competency 'Tcl Programming' (average)" $result 51.00
- set level [::xolp::User get_competency_evaluation \
- -user_id [ad_conn user_id] \
- -policy "average" \
- -competency_iri "http://example.com/competencies/programming/tcl"]
- aa_equals "User is a senior Tcl dev. (average)" [$level name] "senior"
+ set result [::xolp::User get_competency_result \
+ -user_id [ad_conn user_id] \
+ -policy "average" \
+ -competency_iri "http://example.com/competencies/programming/tcl"]
+ aa_equals "User has 72% of competency 'Tcl Programming' (average)" $result 51.00
+ set level [::xolp::User get_competency_evaluation \
+ -user_id [ad_conn user_id] \
+ -policy "average" \
+ -competency_iri "http://example.com/competencies/programming/tcl"]
+ aa_equals "User is a senior Tcl dev. (average)" [$level name] "senior"
- set result [::xolp::User get_competency_result \
- -user_id [ad_conn user_id] \
- -policy "worst" \
- -competency_iri "http://example.com/competencies/programming/tcl"]
- aa_equals "User has 72% of competency 'Tcl Programming' (worst)" $result 30.00
- set level [::xolp::User get_competency_evaluation \
- -user_id [ad_conn user_id] \
- -policy "worst" \
- -competency_iri "http://example.com/competencies/programming/tcl"]
- aa_equals "User is a senior Tcl dev. (worst)" [$level name] "junior"
+ set result [::xolp::User get_competency_result \
+ -user_id [ad_conn user_id] \
+ -policy "worst" \
+ -competency_iri "http://example.com/competencies/programming/tcl"]
+ aa_equals "User has 72% of competency 'Tcl Programming' (worst)" $result 30.00
+ set level [::xolp::User get_competency_evaluation \
+ -user_id [ad_conn user_id] \
+ -policy "worst" \
+ -competency_iri "http://example.com/competencies/programming/tcl"]
+ aa_equals "User is a senior Tcl dev. (worst)" [$level name] "junior"
- #
- # Database Design
- #
- set result [::xolp::User get_competency_result \
- -user_id [ad_conn user_id] \
- -competency_iri "http://example.com/competencies/database-design"]
- aa_equals "User has 40% of competency 'Database Design'" $result 40.00
- set level [::xolp::User get_competency_evaluation \
- -user_id [ad_conn user_id] \
- -competency_iri "http://example.com/competencies/database-design"]
- aa_equals "User is a junior DB dev." [$level name] "junior"
+ #
+ # Database Design
+ #
+ set result [::xolp::User get_competency_result \
+ -user_id [ad_conn user_id] \
+ -competency_iri "http://example.com/competencies/database-design"]
+ aa_equals "User has 40% of competency 'Database Design'" $result 40.00
+ set level [::xolp::User get_competency_evaluation \
+ -user_id [ad_conn user_id] \
+ -competency_iri "http://example.com/competencies/database-design"]
+ aa_equals "User is a junior DB dev." [$level name] "junior"
- #
- # Full Stack Web Development
- #
- set result [::xolp::User get_competency_result \
- -user_id [ad_conn user_id] \
- -competency_iri "http://example.com/competencies/fullstack-webdev"]
- aa_equals "User has 28% full stack power." $result 28.00
- set level [::xolp::User get_competency_evaluation \
- -user_id [ad_conn user_id] \
- -competency_iri "http://example.com/competencies/fullstack-webdev"]
- aa_equals "User is a junior dev." [$level name] "junior"
+ #
+ # Full Stack Web Development
+ #
+ set result [::xolp::User get_competency_result \
+ -user_id [ad_conn user_id] \
+ -competency_iri "http://example.com/competencies/fullstack-webdev"]
+ aa_equals "User has 28% full stack power." $result 28.00
+ set level [::xolp::User get_competency_evaluation \
+ -user_id [ad_conn user_id] \
+ -competency_iri "http://example.com/competencies/fullstack-webdev"]
+ aa_equals "User is a junior dev." [$level name] "junior"
- set result [::xolp::User get_competency_result \
- -user_id [ad_conn user_id] \
- -policy "average" \
- -competency_iri "http://example.com/competencies/fullstack-webdev"]
- aa_equals "User has 22.75% full stack power." $result 22.75
- set level [::xolp::User get_competency_evaluation \
- -user_id [ad_conn user_id] \
- -policy "average" \
- -competency_iri "http://example.com/competencies/fullstack-webdev"]
- aa_equals "User is a luser dev." [$level name] "luser"
+ set result [::xolp::User get_competency_result \
+ -user_id [ad_conn user_id] \
+ -policy "average" \
+ -competency_iri "http://example.com/competencies/fullstack-webdev"]
+ aa_equals "User has 22.75% full stack power." $result 22.75
+ set level [::xolp::User get_competency_evaluation \
+ -user_id [ad_conn user_id] \
+ -policy "average" \
+ -competency_iri "http://example.com/competencies/fullstack-webdev"]
+ aa_equals "User is a luser dev." [$level name] "luser"
- #
- # Software Development
- #
- set result [::xolp::User get_competency_result \
- -user_id [ad_conn user_id] \
- -competency_iri "http://example.com/competencies/software-development"]
- aa_equals "User has 14% software dev competency." $result 14.00
- set level [::xolp::User get_competency_evaluation \
- -user_id [ad_conn user_id] \
- -competency_iri "http://example.com/competencies/software-development"]
- aa_equals "User is a luser dev." [$level name] "luser"
+ #
+ # Software Development
+ #
+ set result [::xolp::User get_competency_result \
+ -user_id [ad_conn user_id] \
+ -competency_iri "http://example.com/competencies/software-development"]
+ aa_equals "User has 14% software dev competency." $result 14.00
+ set level [::xolp::User get_competency_evaluation \
+ -user_id [ad_conn user_id] \
+ -competency_iri "http://example.com/competencies/software-development"]
+ aa_equals "User is a luser dev." [$level name] "luser"
- #
- # Computational Thinking
- #
- set result [::xolp::User get_competency_result \
- -user_id [ad_conn user_id] \
- -competency_iri "http://example.com/competencies/computational-thinking"]
- aa_equals "User has 21% computational thinking skills." $result 21.00
- set level [::xolp::User get_competency_evaluation \
- -user_id [ad_conn user_id] \
- -competency_iri "http://example.com/competencies/computational-thinking"]
- aa_equals "User is a luser comp-thinker." [$level name] "luser"
+ #
+ # Computational Thinking
+ #
+ set result [::xolp::User get_competency_result \
+ -user_id [ad_conn user_id] \
+ -competency_iri "http://example.com/competencies/computational-thinking"]
+ aa_equals "User has 21% computational thinking skills." $result 21.00
+ set level [::xolp::User get_competency_evaluation \
+ -user_id [ad_conn user_id] \
+ -competency_iri "http://example.com/competencies/computational-thinking"]
+ aa_equals "User is a luser comp-thinker." [$level name] "luser"
- #
- # Abstract Thinking
- #
- set result [::xolp::User get_competency_result \
- -user_id [ad_conn user_id] \
- -competency_iri "http://example.com/competencies/abstract-thinking"]
- aa_equals "User can 12.6 abstract thinking skills" $result 12.60
- set level [::xolp::User get_competency_evaluation \
- -user_id [ad_conn user_id] \
- -competency_iri "http://example.com/competencies/abstract-thinking"]
- aa_equals "User is not a thinker." [$level name] "luser"
+ #
+ # Abstract Thinking
+ #
+ set result [::xolp::User get_competency_result \
+ -user_id [ad_conn user_id] \
+ -competency_iri "http://example.com/competencies/abstract-thinking"]
+ aa_equals "User can 12.6 abstract thinking skills" $result 12.60
+ set level [::xolp::User get_competency_evaluation \
+ -user_id [ad_conn user_id] \
+ -competency_iri "http://example.com/competencies/abstract-thinking"]
+ aa_equals "User is not a thinker." [$level name] "luser"
- set result [::xolp::User get_competency_result \
- -user_id [ad_conn user_id] \
- -policy "average" \
- -competency_iri "http://example.com/competencies/abstract-thinking"]
- aa_equals "User can 10.2375 abstract thinking skills" $result 10.24
- set level [::xolp::User get_competency_evaluation \
- -user_id [ad_conn user_id] \
- -policy "average" \
- -competency_iri "http://example.com/competencies/abstract-thinking"]
- aa_equals "User is not a thinker." [$level name] "luser"
- }
+ set result [::xolp::User get_competency_result \
+ -user_id [ad_conn user_id] \
+ -policy "average" \
+ -competency_iri "http://example.com/competencies/abstract-thinking"]
+ aa_equals "User can 10.2375 abstract thinking skills" $result 10.24
+ set level [::xolp::User get_competency_evaluation \
+ -user_id [ad_conn user_id] \
+ -policy "average" \
+ -competency_iri "http://example.com/competencies/abstract-thinking"]
+ aa_equals "User is not a thinker." [$level name] "luser"
+ }
}
+
+#
+# Local variables:
+# mode: tcl
+# tcl-indent-level: 2
+# indent-tabs-mode: nil
+# End: