github.com/quickfeed/quickfeed@v0.0.0-20240507093252-ed8ca812a09c/qf/assignment_test.go (about)

     1  package qf_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/quickfeed/quickfeed/qf"
     7  )
     8  
     9  func TestIsApproved(t *testing.T) {
    10  	a := &qf.Assignment{}
    11  	b := &qf.Assignment{
    12  		ScoreLimit: 80,
    13  	}
    14  	c := &qf.Assignment{
    15  		AutoApprove: true,
    16  		ScoreLimit:  80,
    17  	}
    18  	d := &qf.Assignment{
    19  		IsGroupLab:  false, // making it explicit that it isn't a group lab
    20  		AutoApprove: true,
    21  		ScoreLimit:  90,
    22  	}
    23  	e := &qf.Assignment{
    24  		IsGroupLab:  true, // making it explicit that it is a group lab
    25  		AutoApprove: true,
    26  		ScoreLimit:  90,
    27  	}
    28  	isApprovedTests := []struct {
    29  		name       string
    30  		assignment *qf.Assignment
    31  		submission *qf.Submission
    32  		score      uint32
    33  		expected   qf.Submission_Status
    34  	}{
    35  		{
    36  			name:       "Assignment:ScoreLimit=0:NoAutoApprove,Submission:Status=NONE:OldScore=50,NewScore:55",
    37  			assignment: a,
    38  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 50},
    39  			score:      55,
    40  			expected:   qf.Submission_NONE,
    41  		},
    42  		{
    43  			name:       "Assignment:ScoreLimit=80:NoAutoApprove,Submission:Status=NONE:OldScore=50,NewScore:55",
    44  			assignment: b,
    45  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 50},
    46  			score:      55,
    47  			expected:   qf.Submission_NONE,
    48  		},
    49  		{
    50  			name:       "Assignment:ScoreLimit=80:NoAutoApprove,Submission:Status=NONE:OldScore=50,NewScore:80",
    51  			assignment: b,
    52  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 50},
    53  			score:      80,
    54  			expected:   qf.Submission_NONE,
    55  		},
    56  		{
    57  			name:       "Assignment:ScoreLimit=80:NoAutoApprove,Submission:Status=NONE:OldScore=80,NewScore:75",
    58  			assignment: b,
    59  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 80},
    60  			score:      75,
    61  			expected:   qf.Submission_NONE,
    62  		},
    63  		{
    64  			name:       "Assignment:ScoreLimit=80:NoAutoApprove,Submission:Status=NONE:OldScore=80,NewScore:85",
    65  			assignment: b,
    66  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 80},
    67  			score:      85,
    68  			expected:   qf.Submission_NONE,
    69  		},
    70  		{
    71  			name:       "Assignment:ScoreLimit=80:NoAutoApprove,Submission:Status=REJECTED:OldScore=50,NewScore:80",
    72  			assignment: b,
    73  			submission: &qf.Submission{Status: qf.Submission_REJECTED, Score: 50},
    74  			score:      80,
    75  			expected:   qf.Submission_REJECTED,
    76  		},
    77  		{
    78  			name:       "Assignment:ScoreLimit=80:NoAutoApprove,Submission:Status=REVISION:OldScore=50,NewScore:80",
    79  			assignment: b,
    80  			submission: &qf.Submission{Status: qf.Submission_REVISION, Score: 50},
    81  			score:      80,
    82  			expected:   qf.Submission_REVISION,
    83  		},
    84  		{
    85  			name:       "Assignment:ScoreLimit=80:NoAutoApprove,Submission:Status=APPROVED:OldScore=50,NewScore:80",
    86  			assignment: b,
    87  			submission: &qf.Submission{Status: qf.Submission_APPROVED, Score: 50},
    88  			score:      80,
    89  			expected:   qf.Submission_APPROVED,
    90  		},
    91  		{
    92  			name:       "Assignment:ScoreLimit=80:AutoApprove,Submission:Status=NONE:OldScore=50,NewScore:55",
    93  			assignment: c,
    94  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 50},
    95  			score:      55,
    96  			expected:   qf.Submission_NONE,
    97  		},
    98  		{
    99  			name:       "Assignment:ScoreLimit=80:AutoApprove,Submission:Status=NONE:OldScore=50,NewScore:79",
   100  			assignment: c,
   101  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 50},
   102  			score:      79,
   103  			expected:   qf.Submission_NONE,
   104  		},
   105  		{
   106  			name:       "Assignment:ScoreLimit=80:AutoApprove,Submission:Status=NONE:OldScore=50,NewScore:80",
   107  			assignment: c,
   108  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 50},
   109  			score:      80,
   110  			expected:   qf.Submission_APPROVED,
   111  		},
   112  		{
   113  			name:       "Assignment:ScoreLimit=80:AutoApprove,Submission:Status=APPROVED:OldScore=50,NewScore:0",
   114  			assignment: c,
   115  			submission: &qf.Submission{Status: qf.Submission_APPROVED, Score: 50},
   116  			score:      0,
   117  			expected:   qf.Submission_APPROVED,
   118  		},
   119  		{
   120  			name:       "Assignment:ScoreLimit=90:AutoApprove,Submission:GroupId=5:Status=NONE:OldScore=0,NewScore:50",
   121  			assignment: d,
   122  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 50, GroupID: 5},
   123  			score:      50,
   124  			expected:   qf.Submission_NONE,
   125  		},
   126  		{
   127  			name:       "Assignment:ScoreLimit=90:AutoApprove,Submission:GroupId=5:Status=NONE:OldScore=0,NewScore:95",
   128  			assignment: d,
   129  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 95, GroupID: 5},
   130  			score:      95,
   131  			expected:   qf.Submission_NONE,
   132  		},
   133  		{
   134  			name:       "Assignment:ScoreLimit=90:AutoApprove:IsGroupLab,Submission:UserId=15:Status=NONE:OldScore=0,NewScore:50",
   135  			assignment: e,
   136  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 50, UserID: 15},
   137  			score:      50,
   138  			expected:   qf.Submission_NONE,
   139  		},
   140  		{
   141  			name:       "Assignment:ScoreLimit=90:AutoApprove:IsGroupLab,Submission:UserId=15:Status=NONE:OldScore=0,NewScore:95",
   142  			assignment: e,
   143  			submission: &qf.Submission{Status: qf.Submission_NONE, Score: 95, UserID: 15},
   144  			score:      95,
   145  			expected:   qf.Submission_NONE,
   146  		},
   147  	}
   148  
   149  	for _, test := range isApprovedTests {
   150  		t.Run(test.name, func(t *testing.T) {
   151  			got := test.assignment.IsApproved(test.submission, test.score)
   152  			if got != test.expected {
   153  				t.Errorf("IsApproved(%v, %v, %d) = %v, expected %v", test.assignment, test.submission, test.score, got, test.expected)
   154  			}
   155  		})
   156  	}
   157  }