Reference to the user's class.
String of comma-separated badges.
Whether to promote moderators to operator.
Whether to promote VIPs to elevated.
true if changes were made; false if not.
1 import lu.conv : toString; 2 3 { 4 enum badges = "subscriber/12,sub-gift-leader/1"; 5 auto class_ = IRCUser.Class.anyone; 6 immutable changed = promoteUserFromBadges(class_, badges, false, false); 7 assert(changed); 8 enum expected = IRCUser.Class.registered; 9 assert((class_ == expected), class_.toString); 10 } 11 { 12 enum badges = "premium/1"; 13 auto class_ = IRCUser.Class.anyone; 14 immutable changed = promoteUserFromBadges(class_, badges, false, false); 15 assert(!changed); 16 enum expected = IRCUser.Class.anyone; 17 assert((class_ == expected), class_.toString); 18 } 19 { 20 enum badges = "subscriber/12,vip/1"; 21 auto class_ = IRCUser.Class.anyone; 22 immutable changed = promoteUserFromBadges(class_, badges, false, false); 23 assert(changed); 24 enum expected = IRCUser.Class.registered; // because promoteVIPs false 25 assert((class_ == expected), class_.toString); 26 } 27 { 28 enum badges = "subscriber/12,vip/1"; 29 auto class_ = IRCUser.Class.anyone; 30 immutable changed = promoteUserFromBadges(class_, badges, true, true); 31 assert(changed); 32 enum expected = IRCUser.Class.elevated; 33 assert((class_ == expected), class_.toString); 34 } 35 { 36 enum badges = "moderator/1,subscriber/3012"; 37 auto class_ = IRCUser.Class.anyone; 38 immutable changed = promoteUserFromBadges(class_, badges, true, true); 39 assert(changed); 40 enum expected = IRCUser.Class.operator; 41 assert((class_ == expected), class_.toString); 42 } 43 { 44 enum badges = "moderator/1,subscriber/3012"; 45 auto class_ = IRCUser.Class.anyone; 46 immutable changed = promoteUserFromBadges(class_, badges, false, true); 47 assert(changed); 48 enum expected = IRCUser.Class.registered; 49 assert((class_ == expected), class_.toString); 50 } 51 { 52 enum badges = "broadcaster/1,subscriber/12,partner/1"; 53 auto class_ = IRCUser.Class.anyone; 54 immutable changed = promoteUserFromBadges(class_, badges, false, true); 55 assert(changed); 56 enum expected = IRCUser.Class.registered; // not staff because broadcasters are identified elsewhere 57 assert((class_ == expected), class_.toString); 58 } 59 { 60 enum badges = "moderator/1"; // no comma splitter test 61 auto class_ = IRCUser.Class.anyone; 62 immutable changed = promoteUserFromBadges(class_, badges, true, true); 63 assert(changed); 64 enum expected = IRCUser.Class.operator; 65 assert((class_ == expected), class_.toString); 66 } 67 { 68 enum badges = "subscriber/1"; 69 auto class_ = IRCUser.Class.operator; 70 immutable changed = promoteUserFromBadges(class_, badges, true, true); 71 assert(!changed); 72 enum expected = IRCUser.Class.operator; 73 assert((class_ == expected), class_.toString); 74 } 75 { 76 enum badges = string.init; 77 auto class_ = IRCUser.Class.staff; 78 immutable changed = promoteUserFromBadges(class_, badges, true, true); 79 assert(!changed); 80 enum expected = IRCUser.Class.staff; 81 assert((class_ == expected), class_.toString); 82 } 83 { 84 enum badges = string.init; 85 auto class_ = IRCUser.Class.anyone; 86 immutable changed = promoteUserFromBadges(class_, badges, false, false); 87 assert(!changed); 88 enum expected = IRCUser.Class.anyone; 89 assert((class_ == expected), class_.toString); 90 }
Infers a user's class based on their badge(s).