Best Python code snippet using lemoncheesecake
re_tests.py
Source:re_tests.py
1#!/usr/bin/env python2# -*- mode: python -*-3# $Id: re_tests.py,v 1.1 2005/10/05 20:19:28 eytanadar Exp $45# Re test suite and benchmark suite v1.567# The 3 possible outcomes for each pattern8[SUCCEED, FAIL, SYNTAX_ERROR] = range(3)910# Benchmark suite (needs expansion)11#12# The benchmark suite does not test correctness, just speed. The13# first element of each tuple is the regex pattern; the second is a14# string to match it against. The benchmarking code will embed the15# second string inside several sizes of padding, to test how regex16# matching performs on large strings.1718benchmarks = [19 ('Python', 'Python'), # Simple text literal20 ('.*Python', 'Python'), # Bad text literal21 ('.*Python.*', 'Python'), # Worse text literal22 ('.*(Python)', 'Python'), # Bad text literal with grouping2324 ('(Python|Perl|Tcl', 'Perl'), # Alternation25 ('(Python|Perl|Tcl)', 'Perl'), # Grouped alternation26 ('(Python)\\1', 'PythonPython'), # Backreference27 ('([0a-z][a-z]*,)+', 'a5,b7,c9,'), # Disable the fastmap optimization28 ('([a-z][a-z0-9]*,)+', 'a5,b7,c9,') # A few sets29]3031# Test suite (for verifying correctness)32#33# The test suite is a list of 5- or 3-tuples. The 5 parts of a34# complete tuple are:35# element 0: a string containing the pattern36# 1: the string to match against the pattern37# 2: the expected result (SUCCEED, FAIL, SYNTAX_ERROR)38# 3: a string that will be eval()'ed to produce a test string.39# This is an arbitrary Python expression; the available40# variables are "found" (the whole match), and "g1", "g2", ...41# up to "g99" contain the contents of each group, or the42# string 'None' if the group wasn't given a value, or the43# string 'Error' if the group index was out of range;44# also "groups", the return value of m.group() (a tuple).45# 4: The expected result of evaluating the expression.46# If the two don't match, an error is reported.47#48# If the regex isn't expected to work, the latter two elements can be omitted.4950tests = [51 # Test ?P< and ?P= extensions52 ('(?P<foo_123', '', SYNTAX_ERROR), # Unterminated group identifier53 ('(?P<1>a)', '', SYNTAX_ERROR), # Begins with a digit54 ('(?P<!>a)', '', SYNTAX_ERROR), # Begins with an illegal char55 ('(?P<foo!>a)', '', SYNTAX_ERROR), # Begins with an illegal char5657 # Same tests, for the ?P= form58 ('(?P<foo_123>a)(?P=foo_123', 'aa', SYNTAX_ERROR),59 ('(?P<foo_123>a)(?P=1)', 'aa', SYNTAX_ERROR),60 ('(?P<foo_123>a)(?P=!)', 'aa', SYNTAX_ERROR),61 ('(?P<foo_123>a)(?P=foo_124', 'aa', SYNTAX_ERROR), # Backref to undefined group6263 ('(?P<foo_123>a)', 'a', SUCCEED, 'g1', 'a'),64 ('(?P<foo_123>a)(?P=foo_123)', 'aa', SUCCEED, 'g1', 'a'),6566 # Test octal escapes67 ('\\1', 'a', SYNTAX_ERROR), # Backreference68 ('[\\1]', '\1', SUCCEED, 'found', '\1'), # Character69 ('\\09', chr(0) + '9', SUCCEED, 'found', chr(0) + '9'),70 ('\\141', 'a', SUCCEED, 'found', 'a'),71 #('(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\119', 'abcdefghijklk9', SUCCEED, 'found+"-"+g11', 'abcdefghijklk9-k'),7273 # Test \0 is handled everywhere74 (r'\0', '\0', SUCCEED, 'found', '\0'),75 (r'[\0a]', '\0', SUCCEED, 'found', '\0'),76 (r'[a\0]', '\0', SUCCEED, 'found', '\0'),77 (r'[^a\0]', '\0', FAIL),7879 # Test various letter escapes80 #(r'\a[\b]\f\n\r\t\v', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'),81 #(r'[\a][\b][\f][\n][\r][\t][\v]', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'),82 (r'\u', '', SYNTAX_ERROR), # A Perl escape83 #(r'\c\e\g\h\i\j\k\m\o\p\q\y\z', 'ceghijkmopqyz', SUCCEED, 'found', 'ceghijkmopqyz'),84 (r'\xff', '\377', SUCCEED, 'found', chr(255)),85 #(r'\x00ffffffffffffff', '\377', SUCCEED, 'found', chr(255)),86 #(r'\x00f', '\017', SUCCEED, 'found', chr(15)),87 #(r'\x00fe', '\376', SUCCEED, 'found', chr(254)),8889 (r"^\w+=(\\[\000-\277]|[^\n\\])*", "SRC=eval.c g.c blah blah blah \\\\\n\tapes.c",90 SUCCEED, 'found', "SRC=eval.c g.c blah blah blah \\\\"),9192 # Test that . only matches \n in DOTALL mode93 ('a.b', 'acb', SUCCEED, 'found', 'acb'),94 ('a.b', 'a\nb', FAIL),95 ('a.*b', 'acc\nccb', FAIL),96 ('a.{4,5}b', 'acc\nccb', FAIL),97 ('a.b', 'a\rb', SUCCEED, 'found', 'a\rb'),98 #('a.b(?s)', 'a\nb', SUCCEED, 'found', 'a\nb'),99 ('a.*(?s)b', 'acc\nccb', SUCCEED, 'found', 'acc\nccb'),100 ('(?s)a.{4,5}b', 'acc\nccb', SUCCEED, 'found', 'acc\nccb'),101 ('(?s)a.b', 'a\nb', SUCCEED, 'found', 'a\nb'),102103 (')', '', SYNTAX_ERROR), # Unmatched right bracket104 ('', '', SUCCEED, 'found', ''), # Empty pattern105 ('abc', 'abc', SUCCEED, 'found', 'abc'),106 ('abc', 'xbc', FAIL),107 ('abc', 'axc', FAIL),108 ('abc', 'abx', FAIL),109 ('abc', 'xabcy', SUCCEED, 'found', 'abc'),110 ('abc', 'ababc', SUCCEED, 'found', 'abc'),111 ('ab*c', 'abc', SUCCEED, 'found', 'abc'),112 ('ab*bc', 'abc', SUCCEED, 'found', 'abc'),113 ('ab*bc', 'abbc', SUCCEED, 'found', 'abbc'),114 ('ab*bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),115 ('ab+bc', 'abbc', SUCCEED, 'found', 'abbc'),116 ('ab+bc', 'abc', FAIL),117 ('ab+bc', 'abq', FAIL),118 ('ab+bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),119 ('ab?bc', 'abbc', SUCCEED, 'found', 'abbc'),120 ('ab?bc', 'abc', SUCCEED, 'found', 'abc'),121 ('ab?bc', 'abbbbc', FAIL),122 ('ab?c', 'abc', SUCCEED, 'found', 'abc'),123 ('^abc$', 'abc', SUCCEED, 'found', 'abc'),124 ('^abc$', 'abcc', FAIL),125 ('^abc', 'abcc', SUCCEED, 'found', 'abc'),126 ('^abc$', 'aabc', FAIL),127 ('abc$', 'aabc', SUCCEED, 'found', 'abc'),128 ('^', 'abc', SUCCEED, 'found+"-"', '-'),129 ('$', 'abc', SUCCEED, 'found+"-"', '-'),130 ('a.c', 'abc', SUCCEED, 'found', 'abc'),131 ('a.c', 'axc', SUCCEED, 'found', 'axc'),132 ('a.*c', 'axyzc', SUCCEED, 'found', 'axyzc'),133 ('a.*c', 'axyzd', FAIL),134 ('a[bc]d', 'abc', FAIL),135 ('a[bc]d', 'abd', SUCCEED, 'found', 'abd'),136 ('a[b-d]e', 'abd', FAIL),137 ('a[b-d]e', 'ace', SUCCEED, 'found', 'ace'),138 ('a[b-d]', 'aac', SUCCEED, 'found', 'ac'),139 ('a[-b]', 'a-', SUCCEED, 'found', 'a-'),140 ('a[\\-b]', 'a-', SUCCEED, 'found', 'a-'),141 ('a[b-]', 'a-', SYNTAX_ERROR),142 ('a[]b', '-', SYNTAX_ERROR),143 ('a[', '-', SYNTAX_ERROR),144 ('a\\', '-', SYNTAX_ERROR),145 ('abc)', '-', SYNTAX_ERROR),146 ('(abc', '-', SYNTAX_ERROR),147 ('a]', 'a]', SUCCEED, 'found', 'a]'),148 ('a[]]b', 'a]b', SUCCEED, 'found', 'a]b'),149 ('a[\]]b', 'a]b', SUCCEED, 'found', 'a]b'),150 ('a[^bc]d', 'aed', SUCCEED, 'found', 'aed'),151 ('a[^bc]d', 'abd', FAIL),152 ('a[^-b]c', 'adc', SUCCEED, 'found', 'adc'),153 ('a[^-b]c', 'a-c', FAIL),154 ('a[^]b]c', 'a]c', FAIL),155 ('a[^]b]c', 'adc', SUCCEED, 'found', 'adc'),156 ('\\ba\\b', 'a-', SUCCEED, '"-"', '-'),157 ('\\ba\\b', '-a', SUCCEED, '"-"', '-'),158 ('\\ba\\b', '-a-', SUCCEED, '"-"', '-'),159 ('\\by\\b', 'xy', FAIL),160 ('\\by\\b', 'yz', FAIL),161 ('\\by\\b', 'xyz', FAIL),162 ('x\\b', 'xyz', FAIL),163 ('x\\B', 'xyz', SUCCEED, '"-"', '-'),164 ('\\Bz', 'xyz', SUCCEED, '"-"', '-'),165 ('z\\B', 'xyz', FAIL),166 ('\\Bx', 'xyz', FAIL),167 ('\\Ba\\B', 'a-', FAIL, '"-"', '-'),168 ('\\Ba\\B', '-a', FAIL, '"-"', '-'),169 ('\\Ba\\B', '-a-', FAIL, '"-"', '-'),170 ('\\By\\B', 'xy', FAIL),171 ('\\By\\B', 'yz', FAIL),172 ('\\By\\b', 'xy', SUCCEED, '"-"', '-'),173 ('\\by\\B', 'yz', SUCCEED, '"-"', '-'),174 ('\\By\\B', 'xyz', SUCCEED, '"-"', '-'),175 ('ab|cd', 'abc', SUCCEED, 'found', 'ab'),176 ('ab|cd', 'abcd', SUCCEED, 'found', 'ab'),177 ('()ef', 'def', SUCCEED, 'found+"-"+g1', 'ef-'),178 ('$b', 'b', FAIL),179 ('a\\(b', 'a(b', SUCCEED, 'found+"-"+g1', 'a(b-Error'),180 ('a\\(*b', 'ab', SUCCEED, 'found', 'ab'),181 ('a\\(*b', 'a((b', SUCCEED, 'found', 'a((b'),182 ('a\\\\b', 'a\\b', SUCCEED, 'found', 'a\\b'),183 ('((a))', 'abc', SUCCEED, 'found+"-"+g1+"-"+g2', 'a-a-a'),184 ('(a)b(c)', 'abc', SUCCEED, 'found+"-"+g1+"-"+g2', 'abc-a-c'),185 ('a+b+c', 'aabbabc', SUCCEED, 'found', 'abc'),186 ('(a+|b)*', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),187 ('(a+|b)+', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),188 ('(a+|b)?', 'ab', SUCCEED, 'found+"-"+g1', 'a-a'),189 (')(', '-', SYNTAX_ERROR),190 ('[^ab]*', 'cde', SUCCEED, 'found', 'cde'),191 ('abc', '', FAIL),192 ('a*', '', SUCCEED, 'found', ''),193 ('a|b|c|d|e', 'e', SUCCEED, 'found', 'e'),194 ('(a|b|c|d|e)f', 'ef', SUCCEED, 'found+"-"+g1', 'ef-e'),195 ('abcd*efg', 'abcdefg', SUCCEED, 'found', 'abcdefg'),196 ('ab*', 'xabyabbbz', SUCCEED, 'found', 'ab'),197 ('ab*', 'xayabbbz', SUCCEED, 'found', 'a'),198 ('(ab|cd)e', 'abcde', SUCCEED, 'found+"-"+g1', 'cde-cd'),199 ('[abhgefdc]ij', 'hij', SUCCEED, 'found', 'hij'),200 ('^(ab|cd)e', 'abcde', FAIL, 'xg1y', 'xy'),201 ('(abc|)ef', 'abcdef', SUCCEED, 'found+"-"+g1', 'ef-'),202 ('(a|b)c*d', 'abcd', SUCCEED, 'found+"-"+g1', 'bcd-b'),203 ('(ab|ab*)bc', 'abc', SUCCEED, 'found+"-"+g1', 'abc-a'),204 ('a([bc]*)c*', 'abc', SUCCEED, 'found+"-"+g1', 'abc-bc'),205 ('a([bc]*)(c*d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'),206 ('a([bc]+)(c*d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'),207 ('a([bc]*)(c+d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-b-cd'),208 ('a[bcd]*dcdcde', 'adcdcde', SUCCEED, 'found', 'adcdcde'),209 ('a[bcd]+dcdcde', 'adcdcde', FAIL),210 ('(ab|a)b*c', 'abc', SUCCEED, 'found+"-"+g1', 'abc-ab'),211 ('((a)(b)c)(d)', 'abcd', SUCCEED, 'g1+"-"+g2+"-"+g3+"-"+g4', 'abc-a-b-d'),212 ('[a-zA-Z_][a-zA-Z0-9_]*', 'alpha', SUCCEED, 'found', 'alpha'),213 ('^a(bc+|b[eh])g|.h$', 'abh', SUCCEED, 'found+"-"+g1', 'bh-None'),214 ('(bc+d$|ef*g.|h?i(j|k))', 'effgz', SUCCEED, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'),215 ('(bc+d$|ef*g.|h?i(j|k))', 'ij', SUCCEED, 'found+"-"+g1+"-"+g2', 'ij-ij-j'),216 ('(bc+d$|ef*g.|h?i(j|k))', 'effg', FAIL),217 ('(bc+d$|ef*g.|h?i(j|k))', 'bcdd', FAIL),218 ('(bc+d$|ef*g.|h?i(j|k))', 'reffgz', SUCCEED, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'),219 ('(((((((((a)))))))))', 'a', SUCCEED, 'found', 'a'),220 ('multiple words of text', 'uh-uh', FAIL),221 ('multiple words', 'multiple words, yeah', SUCCEED, 'found', 'multiple words'),222 ('(.*)c(.*)', 'abcde', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcde-ab-de'),223 ('\\((.*), (.*)\\)', '(a, b)', SUCCEED, 'g2+"-"+g1', 'b-a'),224 ('[k]', 'ab', FAIL),225 ('a[-]?c', 'ac', SUCCEED, 'found', 'ac'),226 ('(abc)\\1', 'abcabc', SUCCEED, 'g1', 'abc'),227 ('([a-c]*)\\1', 'abcabc', SUCCEED, 'g1', 'abc'),228 ('^(.+)?B', 'AB', SUCCEED, 'g1', 'A'),229 ('(a+).\\1$', 'aaaaa', SUCCEED, 'found+"-"+g1', 'aaaaa-aa'),230 ('^(a+).\\1$', 'aaaa', FAIL),231 ('(abc)\\1', 'abcabc', SUCCEED, 'found+"-"+g1', 'abcabc-abc'),232 ('([a-c]+)\\1', 'abcabc', SUCCEED, 'found+"-"+g1', 'abcabc-abc'),233 ('(a)\\1', 'aa', SUCCEED, 'found+"-"+g1', 'aa-a'),234 ('(a+)\\1', 'aa', SUCCEED, 'found+"-"+g1', 'aa-a'),235 ('(a+)+\\1', 'aa', SUCCEED, 'found+"-"+g1', 'aa-a'),236 ('(a).+\\1', 'aba', SUCCEED, 'found+"-"+g1', 'aba-a'),237 ('(a)ba*\\1', 'aba', SUCCEED, 'found+"-"+g1', 'aba-a'),238 ('(aa|a)a\\1$', 'aaa', SUCCEED, 'found+"-"+g1', 'aaa-a'),239 ('(a|aa)a\\1$', 'aaa', SUCCEED, 'found+"-"+g1', 'aaa-a'),240 ('(a+)a\\1$', 'aaa', SUCCEED, 'found+"-"+g1', 'aaa-a'),241 ('([abc]*)\\1', 'abcabc', SUCCEED, 'found+"-"+g1', 'abcabc-abc'),242 ('(a)(b)c|ab', 'ab', SUCCEED, 'found+"-"+g1+"-"+g2', 'ab-None-None'),243 ('(a)+x', 'aaax', SUCCEED, 'found+"-"+g1', 'aaax-a'),244 ('([ac])+x', 'aacx', SUCCEED, 'found+"-"+g1', 'aacx-c'),245 ('([^/]*/)*sub1/', 'd:msgs/tdir/sub1/trial/away.cpp', SUCCEED, 'found+"-"+g1', 'd:msgs/tdir/sub1/-tdir/'),246 ('([^.]*)\\.([^:]*):[T ]+(.*)', 'track1.title:TBlah blah blah', SUCCEED, 'found+"-"+g1+"-"+g2+"-"+g3', 'track1.title:TBlah blah blah-track1-title-Blah blah blah'),247 ('([^N]*N)+', 'abNNxyzN', SUCCEED, 'found+"-"+g1', 'abNNxyzN-xyzN'),248 ('([^N]*N)+', 'abNNxyz', SUCCEED, 'found+"-"+g1', 'abNN-N'),249 ('([abc]*)x', 'abcx', SUCCEED, 'found+"-"+g1', 'abcx-abc'),250 ('([abc]*)x', 'abc', FAIL),251 ('([xyz]*)x', 'abcx', SUCCEED, 'found+"-"+g1', 'x-'),252 ('(a)+b|aac', 'aac', SUCCEED, 'found+"-"+g1', 'aac-None'),253254 # Test symbolic groups255256 ('(?P<i d>aaa)a', 'aaaa', SYNTAX_ERROR),257 ('(?P<id>aaa)a', 'aaaa', SUCCEED, 'found+"-"+id', 'aaaa-aaa'),258 ('(?P<id>aa)(?P=id)', 'aaaa', SUCCEED, 'found+"-"+id', 'aaaa-aa'),259 ('(?P<id>aa)(?P=xd)', 'aaaa', SYNTAX_ERROR),260261 # Test octal escapes/memory references262263 ('\\1', 'a', SYNTAX_ERROR),264 ('\\09', chr(0) + '9', SUCCEED, 'found', chr(0) + '9'),265 ('\\141', 'a', SUCCEED, 'found', 'a'),266 #('(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\119', 'abcdefghijklk9', SUCCEED, 'found+"-"+g11', 'abcdefghijklk9-k'),267268 # All tests from Perl269270 ('abc', 'abc', SUCCEED, 'found', 'abc'),271 ('abc', 'xbc', FAIL),272 ('abc', 'axc', FAIL),273 ('abc', 'abx', FAIL),274 ('abc', 'xabcy', SUCCEED, 'found', 'abc'),275 ('abc', 'ababc', SUCCEED, 'found', 'abc'),276 ('ab*c', 'abc', SUCCEED, 'found', 'abc'),277 ('ab*bc', 'abc', SUCCEED, 'found', 'abc'),278 ('ab*bc', 'abbc', SUCCEED, 'found', 'abbc'),279 ('ab*bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),280 ('ab{0,}bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),281 ('ab+bc', 'abbc', SUCCEED, 'found', 'abbc'),282 ('ab+bc', 'abc', FAIL),283 ('ab+bc', 'abq', FAIL),284 ('ab{1,}bc', 'abq', FAIL),285 ('ab+bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),286 ('ab{1,}bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),287 ('ab{1,3}bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),288 ('ab{3,4}bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),289 ('ab{4,5}bc', 'abbbbc', FAIL),290 ('ab?bc', 'abbc', SUCCEED, 'found', 'abbc'),291 ('ab?bc', 'abc', SUCCEED, 'found', 'abc'),292 ('ab{0,1}bc', 'abc', SUCCEED, 'found', 'abc'),293 ('ab?bc', 'abbbbc', FAIL),294 ('ab?c', 'abc', SUCCEED, 'found', 'abc'),295 ('ab{0,1}c', 'abc', SUCCEED, 'found', 'abc'),296 ('^abc$', 'abc', SUCCEED, 'found', 'abc'),297 ('^abc$', 'abcc', FAIL),298 ('^abc', 'abcc', SUCCEED, 'found', 'abc'),299 ('^abc$', 'aabc', FAIL),300 ('abc$', 'aabc', SUCCEED, 'found', 'abc'),301 ('^', 'abc', SUCCEED, 'found', ''),302 ('$', 'abc', SUCCEED, 'found', ''),303 ('a.c', 'abc', SUCCEED, 'found', 'abc'),304 ('a.c', 'axc', SUCCEED, 'found', 'axc'),305 ('a.*c', 'axyzc', SUCCEED, 'found', 'axyzc'),306 ('a.*c', 'axyzd', FAIL),307 ('a[bc]d', 'abc', FAIL),308 ('a[bc]d', 'abd', SUCCEED, 'found', 'abd'),309 ('a[b-d]e', 'abd', FAIL),310 ('a[b-d]e', 'ace', SUCCEED, 'found', 'ace'),311 ('a[b-d]', 'aac', SUCCEED, 'found', 'ac'),312 ('a[-b]', 'a-', SUCCEED, 'found', 'a-'),313 ('a[b-]', 'a-', SUCCEED, 'found', 'a-'),314 ('a[b-a]', '-', SYNTAX_ERROR),315 ('a[]b', '-', SYNTAX_ERROR),316 ('a[', '-', SYNTAX_ERROR),317 ('a]', 'a]', SUCCEED, 'found', 'a]'),318 ('a[]]b', 'a]b', SUCCEED, 'found', 'a]b'),319 ('a[^bc]d', 'aed', SUCCEED, 'found', 'aed'),320 ('a[^bc]d', 'abd', FAIL),321 ('a[^-b]c', 'adc', SUCCEED, 'found', 'adc'),322 ('a[^-b]c', 'a-c', FAIL),323 ('a[^]b]c', 'a]c', FAIL),324 ('a[^]b]c', 'adc', SUCCEED, 'found', 'adc'),325 ('ab|cd', 'abc', SUCCEED, 'found', 'ab'),326 ('ab|cd', 'abcd', SUCCEED, 'found', 'ab'),327 ('()ef', 'def', SUCCEED, 'found+"-"+g1', 'ef-'),328 ('*a', '-', SYNTAX_ERROR),329 ('(*)b', '-', SYNTAX_ERROR),330 ('$b', 'b', FAIL),331 ('a\\', '-', SYNTAX_ERROR),332 ('a\\(b', 'a(b', SUCCEED, 'found+"-"+g1', 'a(b-Error'),333 ('a\\(*b', 'ab', SUCCEED, 'found', 'ab'),334 ('a\\(*b', 'a((b', SUCCEED, 'found', 'a((b'),335 ('a\\\\b', 'a\\b', SUCCEED, 'found', 'a\\b'),336 ('abc)', '-', SYNTAX_ERROR),337 ('(abc', '-', SYNTAX_ERROR),338 ('((a))', 'abc', SUCCEED, 'found+"-"+g1+"-"+g2', 'a-a-a'),339 ('(a)b(c)', 'abc', SUCCEED, 'found+"-"+g1+"-"+g2', 'abc-a-c'),340 ('a+b+c', 'aabbabc', SUCCEED, 'found', 'abc'),341 ('a{1,}b{1,}c', 'aabbabc', SUCCEED, 'found', 'abc'),342 ('a**', '-', SYNTAX_ERROR),343 ('a.+?c', 'abcabc', SUCCEED, 'found', 'abc'),344 ('(a+|b)*', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),345 ('(a+|b){0,}', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),346 ('(a+|b)+', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),347 ('(a+|b){1,}', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),348 ('(a+|b)?', 'ab', SUCCEED, 'found+"-"+g1', 'a-a'),349 ('(a+|b){0,1}', 'ab', SUCCEED, 'found+"-"+g1', 'a-a'),350 (')(', '-', SYNTAX_ERROR),351 ('[^ab]*', 'cde', SUCCEED, 'found', 'cde'),352 ('abc', '', FAIL),353 ('a*', '', SUCCEED, 'found', ''),354 ('([abc])*d', 'abbbcd', SUCCEED, 'found+"-"+g1', 'abbbcd-c'),355 ('([abc])*bcd', 'abcd', SUCCEED, 'found+"-"+g1', 'abcd-a'),356 ('a|b|c|d|e', 'e', SUCCEED, 'found', 'e'),357 ('(a|b|c|d|e)f', 'ef', SUCCEED, 'found+"-"+g1', 'ef-e'),358 ('abcd*efg', 'abcdefg', SUCCEED, 'found', 'abcdefg'),359 ('ab*', 'xabyabbbz', SUCCEED, 'found', 'ab'),360 ('ab*', 'xayabbbz', SUCCEED, 'found', 'a'),361 ('(ab|cd)e', 'abcde', SUCCEED, 'found+"-"+g1', 'cde-cd'),362 ('[abhgefdc]ij', 'hij', SUCCEED, 'found', 'hij'),363 ('^(ab|cd)e', 'abcde', FAIL),364 ('(abc|)ef', 'abcdef', SUCCEED, 'found+"-"+g1', 'ef-'),365 ('(a|b)c*d', 'abcd', SUCCEED, 'found+"-"+g1', 'bcd-b'),366 ('(ab|ab*)bc', 'abc', SUCCEED, 'found+"-"+g1', 'abc-a'),367 ('a([bc]*)c*', 'abc', SUCCEED, 'found+"-"+g1', 'abc-bc'),368 ('a([bc]*)(c*d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'),369 ('a([bc]+)(c*d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'),370 ('a([bc]*)(c+d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-b-cd'),371 ('a[bcd]*dcdcde', 'adcdcde', SUCCEED, 'found', 'adcdcde'),372 ('a[bcd]+dcdcde', 'adcdcde', FAIL),373 ('(ab|a)b*c', 'abc', SUCCEED, 'found+"-"+g1', 'abc-ab'),374 ('((a)(b)c)(d)', 'abcd', SUCCEED, 'g1+"-"+g2+"-"+g3+"-"+g4', 'abc-a-b-d'),375 ('[a-zA-Z_][a-zA-Z0-9_]*', 'alpha', SUCCEED, 'found', 'alpha'),376 ('^a(bc+|b[eh])g|.h$', 'abh', SUCCEED, 'found+"-"+g1', 'bh-None'),377 ('(bc+d$|ef*g.|h?i(j|k))', 'effgz', SUCCEED, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'),378 ('(bc+d$|ef*g.|h?i(j|k))', 'ij', SUCCEED, 'found+"-"+g1+"-"+g2', 'ij-ij-j'),379 ('(bc+d$|ef*g.|h?i(j|k))', 'effg', FAIL),380 ('(bc+d$|ef*g.|h?i(j|k))', 'bcdd', FAIL),381 ('(bc+d$|ef*g.|h?i(j|k))', 'reffgz', SUCCEED, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'),382 ('((((((((((a))))))))))', 'a', SUCCEED, 'g10', 'a'),383 ('((((((((((a))))))))))\\10', 'aa', SUCCEED, 'found', 'aa'),384# Python does not have the same rules for \\41 so this is a syntax error385# ('((((((((((a))))))))))\\41', 'aa', FAIL),386# ('((((((((((a))))))))))\\41', 'a!', SUCCEED, 'found', 'a!'),387 ('((((((((((a))))))))))\\41', '', SYNTAX_ERROR),388 ('(?i)((((((((((a))))))))))\\41', '', SYNTAX_ERROR),389 ('(((((((((a)))))))))', 'a', SUCCEED, 'found', 'a'),390 ('multiple words of text', 'uh-uh', FAIL),391 ('multiple words', 'multiple words, yeah', SUCCEED, 'found', 'multiple words'),392 ('(.*)c(.*)', 'abcde', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcde-ab-de'),393 ('\\((.*), (.*)\\)', '(a, b)', SUCCEED, 'g2+"-"+g1', 'b-a'),394 ('[k]', 'ab', FAIL),395 ('a[-]?c', 'ac', SUCCEED, 'found', 'ac'),396 ('(abc)\\1', 'abcabc', SUCCEED, 'g1', 'abc'),397 ('([a-c]*)\\1', 'abcabc', SUCCEED, 'g1', 'abc'),398 ('(?i)abc', 'ABC', SUCCEED, 'found', 'ABC'),399 ('(?i)abc', 'XBC', FAIL),400 ('(?i)abc', 'AXC', FAIL),401 ('(?i)abc', 'ABX', FAIL),402 ('(?i)abc', 'XABCY', SUCCEED, 'found', 'ABC'),403 ('(?i)abc', 'ABABC', SUCCEED, 'found', 'ABC'),404 ('(?i)ab*c', 'ABC', SUCCEED, 'found', 'ABC'),405 ('(?i)ab*bc', 'ABC', SUCCEED, 'found', 'ABC'),406 ('(?i)ab*bc', 'ABBC', SUCCEED, 'found', 'ABBC'),407 ('(?i)ab*?bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),408 ('(?i)ab{0,}?bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),409 ('(?i)ab+?bc', 'ABBC', SUCCEED, 'found', 'ABBC'),410 ('(?i)ab+bc', 'ABC', FAIL),411 ('(?i)ab+bc', 'ABQ', FAIL),412 ('(?i)ab{1,}bc', 'ABQ', FAIL),413 ('(?i)ab+bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),414 ('(?i)ab{1,}?bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),415 ('(?i)ab{1,3}?bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),416 ('(?i)ab{3,4}?bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),417 ('(?i)ab{4,5}?bc', 'ABBBBC', FAIL),418 ('(?i)ab??bc', 'ABBC', SUCCEED, 'found', 'ABBC'),419 ('(?i)ab??bc', 'ABC', SUCCEED, 'found', 'ABC'),420 ('(?i)ab{0,1}?bc', 'ABC', SUCCEED, 'found', 'ABC'),421 ('(?i)ab??bc', 'ABBBBC', FAIL),422 ('(?i)ab??c', 'ABC', SUCCEED, 'found', 'ABC'),423 ('(?i)ab{0,1}?c', 'ABC', SUCCEED, 'found', 'ABC'),424 ('(?i)^abc$', 'ABC', SUCCEED, 'found', 'ABC'),425 ('(?i)^abc$', 'ABCC', FAIL),426 ('(?i)^abc', 'ABCC', SUCCEED, 'found', 'ABC'),427 ('(?i)^abc$', 'AABC', FAIL),428 ('(?i)abc$', 'AABC', SUCCEED, 'found', 'ABC'),429 ('(?i)^', 'ABC', SUCCEED, 'found', ''),430 ('(?i)$', 'ABC', SUCCEED, 'found', ''),431 ('(?i)a.c', 'ABC', SUCCEED, 'found', 'ABC'),432 ('(?i)a.c', 'AXC', SUCCEED, 'found', 'AXC'),433 ('(?i)a.*?c', 'AXYZC', SUCCEED, 'found', 'AXYZC'),434 ('(?i)a.*c', 'AXYZD', FAIL),435 ('(?i)a[bc]d', 'ABC', FAIL),436 ('(?i)a[bc]d', 'ABD', SUCCEED, 'found', 'ABD'),437 ('(?i)a[b-d]e', 'ABD', FAIL),438 ('(?i)a[b-d]e', 'ACE', SUCCEED, 'found', 'ACE'),439 ('(?i)a[b-d]', 'AAC', SUCCEED, 'found', 'AC'),440 ('(?i)a[-b]', 'A-', SUCCEED, 'found', 'A-'),441 ('(?i)a[b-]', 'A-', SUCCEED, 'found', 'A-'),442 ('(?i)a[b-a]', '-', SYNTAX_ERROR),443 ('(?i)a[]b', '-', SYNTAX_ERROR),444 ('(?i)a[', '-', SYNTAX_ERROR),445 ('(?i)a]', 'A]', SUCCEED, 'found', 'A]'),446 ('(?i)a[]]b', 'A]B', SUCCEED, 'found', 'A]B'),447 ('(?i)a[^bc]d', 'AED', SUCCEED, 'found', 'AED'),448 ('(?i)a[^bc]d', 'ABD', FAIL),449 ('(?i)a[^-b]c', 'ADC', SUCCEED, 'found', 'ADC'),450 ('(?i)a[^-b]c', 'A-C', FAIL),451 ('(?i)a[^]b]c', 'A]C', FAIL),452 ('(?i)a[^]b]c', 'ADC', SUCCEED, 'found', 'ADC'),453 ('(?i)ab|cd', 'ABC', SUCCEED, 'found', 'AB'),454 ('(?i)ab|cd', 'ABCD', SUCCEED, 'found', 'AB'),455 ('(?i)()ef', 'DEF', SUCCEED, 'found+"-"+g1', 'EF-'),456 ('(?i)*a', '-', SYNTAX_ERROR),457 ('(?i)(*)b', '-', SYNTAX_ERROR),458 ('(?i)$b', 'B', FAIL),459 ('(?i)a\\', '-', SYNTAX_ERROR),460 ('(?i)a\\(b', 'A(B', SUCCEED, 'found+"-"+g1', 'A(B-Error'),461 ('(?i)a\\(*b', 'AB', SUCCEED, 'found', 'AB'),462 ('(?i)a\\(*b', 'A((B', SUCCEED, 'found', 'A((B'),463 ('(?i)a\\\\b', 'A\\B', SUCCEED, 'found', 'A\\B'),464 ('(?i)abc)', '-', SYNTAX_ERROR),465 ('(?i)(abc', '-', SYNTAX_ERROR),466 ('(?i)((a))', 'ABC', SUCCEED, 'found+"-"+g1+"-"+g2', 'A-A-A'),467 ('(?i)(a)b(c)', 'ABC', SUCCEED, 'found+"-"+g1+"-"+g2', 'ABC-A-C'),468 ('(?i)a+b+c', 'AABBABC', SUCCEED, 'found', 'ABC'),469 ('(?i)a{1,}b{1,}c', 'AABBABC', SUCCEED, 'found', 'ABC'),470 ('(?i)a**', '-', SYNTAX_ERROR),471 ('(?i)a.+?c', 'ABCABC', SUCCEED, 'found', 'ABC'),472 ('(?i)a.*?c', 'ABCABC', SUCCEED, 'found', 'ABC'),473 ('(?i)a.{0,5}?c', 'ABCABC', SUCCEED, 'found', 'ABC'),474 ('(?i)(a+|b)*', 'AB', SUCCEED, 'found+"-"+g1', 'AB-B'),475 ('(?i)(a+|b){0,}', 'AB', SUCCEED, 'found+"-"+g1', 'AB-B'),476 ('(?i)(a+|b)+', 'AB', SUCCEED, 'found+"-"+g1', 'AB-B'),477 ('(?i)(a+|b){1,}', 'AB', SUCCEED, 'found+"-"+g1', 'AB-B'),478 ('(?i)(a+|b)?', 'AB', SUCCEED, 'found+"-"+g1', 'A-A'),479 ('(?i)(a+|b){0,1}', 'AB', SUCCEED, 'found+"-"+g1', 'A-A'),480 ('(?i)(a+|b){0,1}?', 'AB', SUCCEED, 'found+"-"+g1', '-None'),481 ('(?i))(', '-', SYNTAX_ERROR),482 ('(?i)[^ab]*', 'CDE', SUCCEED, 'found', 'CDE'),483 ('(?i)abc', '', FAIL),484 ('(?i)a*', '', SUCCEED, 'found', ''),485 ('(?i)([abc])*d', 'ABBBCD', SUCCEED, 'found+"-"+g1', 'ABBBCD-C'),486 ('(?i)([abc])*bcd', 'ABCD', SUCCEED, 'found+"-"+g1', 'ABCD-A'),487 ('(?i)a|b|c|d|e', 'E', SUCCEED, 'found', 'E'),488 ('(?i)(a|b|c|d|e)f', 'EF', SUCCEED, 'found+"-"+g1', 'EF-E'),489 ('(?i)abcd*efg', 'ABCDEFG', SUCCEED, 'found', 'ABCDEFG'),490 ('(?i)ab*', 'XABYABBBZ', SUCCEED, 'found', 'AB'),491 ('(?i)ab*', 'XAYABBBZ', SUCCEED, 'found', 'A'),492 ('(?i)(ab|cd)e', 'ABCDE', SUCCEED, 'found+"-"+g1', 'CDE-CD'),493 ('(?i)[abhgefdc]ij', 'HIJ', SUCCEED, 'found', 'HIJ'),494 ('(?i)^(ab|cd)e', 'ABCDE', FAIL),495 ('(?i)(abc|)ef', 'ABCDEF', SUCCEED, 'found+"-"+g1', 'EF-'),496 ('(?i)(a|b)c*d', 'ABCD', SUCCEED, 'found+"-"+g1', 'BCD-B'),497 ('(?i)(ab|ab*)bc', 'ABC', SUCCEED, 'found+"-"+g1', 'ABC-A'),498 ('(?i)a([bc]*)c*', 'ABC', SUCCEED, 'found+"-"+g1', 'ABC-BC'),499 ('(?i)a([bc]*)(c*d)', 'ABCD', SUCCEED, 'found+"-"+g1+"-"+g2', 'ABCD-BC-D'),500 ('(?i)a([bc]+)(c*d)', 'ABCD', SUCCEED, 'found+"-"+g1+"-"+g2', 'ABCD-BC-D'),501 ('(?i)a([bc]*)(c+d)', 'ABCD', SUCCEED, 'found+"-"+g1+"-"+g2', 'ABCD-B-CD'),502 ('(?i)a[bcd]*dcdcde', 'ADCDCDE', SUCCEED, 'found', 'ADCDCDE'),503 ('(?i)a[bcd]+dcdcde', 'ADCDCDE', FAIL),504 ('(?i)(ab|a)b*c', 'ABC', SUCCEED, 'found+"-"+g1', 'ABC-AB'),505 ('(?i)((a)(b)c)(d)', 'ABCD', SUCCEED, 'g1+"-"+g2+"-"+g3+"-"+g4', 'ABC-A-B-D'),506 ('(?i)[a-zA-Z_][a-zA-Z0-9_]*', 'ALPHA', SUCCEED, 'found', 'ALPHA'),507 ('(?i)^a(bc+|b[eh])g|.h$', 'ABH', SUCCEED, 'found+"-"+g1', 'BH-None'),508 ('(?i)(bc+d$|ef*g.|h?i(j|k))', 'EFFGZ', SUCCEED, 'found+"-"+g1+"-"+g2', 'EFFGZ-EFFGZ-None'),509 ('(?i)(bc+d$|ef*g.|h?i(j|k))', 'IJ', SUCCEED, 'found+"-"+g1+"-"+g2', 'IJ-IJ-J'),510 ('(?i)(bc+d$|ef*g.|h?i(j|k))', 'EFFG', FAIL),511 ('(?i)(bc+d$|ef*g.|h?i(j|k))', 'BCDD', FAIL),512 ('(?i)(bc+d$|ef*g.|h?i(j|k))', 'REFFGZ', SUCCEED, 'found+"-"+g1+"-"+g2', 'EFFGZ-EFFGZ-None'),513 ('(?i)((((((((((a))))))))))', 'A', SUCCEED, 'g10', 'A'),514 ('(?i)((((((((((a))))))))))\\10', 'AA', SUCCEED, 'found', 'AA'),515 #('(?i)((((((((((a))))))))))\\41', 'AA', FAIL),516 #('(?i)((((((((((a))))))))))\\41', 'A!', SUCCEED, 'found', 'A!'),517 ('(?i)(((((((((a)))))))))', 'A', SUCCEED, 'found', 'A'),518 ('(?i)(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))', 'A', SUCCEED, 'g1', 'A'),519 ('(?i)(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))', 'C', SUCCEED, 'g1', 'C'),520 ('(?i)multiple words of text', 'UH-UH', FAIL),521 ('(?i)multiple words', 'MULTIPLE WORDS, YEAH', SUCCEED, 'found', 'MULTIPLE WORDS'),522 ('(?i)(.*)c(.*)', 'ABCDE', SUCCEED, 'found+"-"+g1+"-"+g2', 'ABCDE-AB-DE'),523 ('(?i)\\((.*), (.*)\\)', '(A, B)', SUCCEED, 'g2+"-"+g1', 'B-A'),524 ('(?i)[k]', 'AB', FAIL),525# ('(?i)abcd', 'ABCD', SUCCEED, 'found+"-"+\\found+"-"+\\\\found', 'ABCD-$&-\\ABCD'),526# ('(?i)a(bc)d', 'ABCD', SUCCEED, 'g1+"-"+\\g1+"-"+\\\\g1', 'BC-$1-\\BC'),527 ('(?i)a[-]?c', 'AC', SUCCEED, 'found', 'AC'),528 ('(?i)(abc)\\1', 'ABCABC', SUCCEED, 'g1', 'ABC'),529 ('(?i)([a-c]*)\\1', 'ABCABC', SUCCEED, 'g1', 'ABC'),530 ('a(?!b).', 'abad', SUCCEED, 'found', 'ad'),531 ('a(?=d).', 'abad', SUCCEED, 'found', 'ad'),532 ('a(?=c|d).', 'abad', SUCCEED, 'found', 'ad'),533 ('a(?:b|c|d)(.)', 'ace', SUCCEED, 'g1', 'e'),534 ('a(?:b|c|d)*(.)', 'ace', SUCCEED, 'g1', 'e'),535 ('a(?:b|c|d)+?(.)', 'ace', SUCCEED, 'g1', 'e'),536 ('a(?:b|(c|e){1,2}?|d)+?(.)', 'ace', SUCCEED, 'g1 + g2', 'ce'),537 ('^(.+)?B', 'AB', SUCCEED, 'g1', 'A'),538539 # Comments using the (?#...) syntax540541 ('w(?# comment', 'w', SYNTAX_ERROR),542 ('w(?# comment 1)xy(?# comment 2)z', 'wxyz', SUCCEED, 'found', 'wxyz'),543544 # Check odd placement of embedded pattern modifiers545546 ('w(?i)', 'W', SYNTAX_ERROR),547548 # Comments using the x embedded pattern modifier549550 ("""(?x)w# comment 1551 x y552 # comment 2553 z""", 'wxyz', SUCCEED, 'found', 'wxyz'),554555 # using the m embedded pattern modifier556557 #('^abc', """jkl558#abc559#xyz""", FAIL),560 ('(?m)^abc', """jkl561abc562xyz""", SUCCEED, 'found', 'abc'),563564 ('(?m)abc$', """jkl565xyzabc566123""", SUCCEED, 'found', 'abc'),567568 # using the s embedded pattern modifier569570 ('a.b', 'a\nb', FAIL),571 ('(?s)a.b', 'a\nb', SUCCEED, 'found', 'a\nb'),572573 # test \w, etc. both inside and outside character classes574575 ('\\w+', '--ab_cd0123--', SUCCEED, 'found', 'ab_cd0123'),576 ('[\\w]+', '--ab_cd0123--', SUCCEED, 'found', 'ab_cd0123'),577 ('\\D+', '1234abc5678', SUCCEED, 'found', 'abc'),578 ('[\\D]+', '1234abc5678', SUCCEED, 'found', 'abc'),579 ('[\\da-fA-F]+', '123abc', SUCCEED, 'found', '123abc'),580 ('[\\d-x]', '-', SYNTAX_ERROR),581 (r'([\s]*)([\S]*)([\s]*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '),582 (r'(\s*)(\S*)(\s*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '),583584 (r'\xff', '\377', SUCCEED, 'found', chr(255)),585 #(r'\x00ff', '\377', SUCCEED, 'found', chr(255)),586 #(r'\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'),587 ('\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'),588 #(r'\t\n\v\r\f\a', '\t\n\v\r\f\a', SUCCEED, 'found', chr(9)+chr(10)+chr(11)+chr(13)+chr(12)+chr(7)),589 #(r'[\t][\n][\v][\r][\f][\b]', '\t\n\v\r\f\b', SUCCEED, 'found', '\t\n\v\r\f\b'),
...
app.js
Source:app.js
1var express = require("express"),2 app =express(),3 bodyparser =require("body-parser"),4 mongoose =require("mongoose"),5 multer =require("multer"),6 methodOverride =require("method-override"),7 passport =require("passport"),8 Project =require("./models/project"),9 User =require("./models/user"),10 Appliedproject =require("./models/appliedProject"),11 middleware =require("./middleware"),12 session =require("express-session"),13 multer = require('multer'), 14 fs = require('fs'),15 path = require('path');1617 18 // SET STORAGE19 var storage = multer.diskStorage({20 destination: function (req, file, cb) {21 cb(null, 'public/uploads') //null is the error field and uploads is the folder name where pictures will be stored22 },23 filename: function (req, file, cb) {24 cb(null, file.fieldname + '-' + Date.now()+path.extname(file.originalname)) //fieldname is the name given to the upload input box in the html file and path is used to get the file extension name25 }26 }) 27 var upload = multer({ storage: storage })28293031app.use(bodyparser.urlencoded({extended:true}));32app.use('/public',express.static('public'));33app.use(methodOverride("_method"));343536app.set("view engine","ejs");373839mongoose.connect("mongodb://localhost:27017/ProjectPortal", { useNewUrlParser: true,useUnifiedTopology: true,useFindAndModify:false});404142//Setting up passport43app.use(session({44 secret: "Its our secret.",45 resave: false,46 saveUninitialized: false47}));4849app.use(passport.initialize());50app.use(passport.session());51passport.use(User.createStrategy());52passport.serializeUser(User.serializeUser());53passport.deserializeUser(User.deserializeUser());54555657const { POINT_CONVERSION_COMPRESSED } = require("constants");58const e = require("express");59const { isLoggedIn } = require("./middleware");60var indexRoutes = require("./routes/index");6162app.use(indexRoutes);636465app.get("/projects",function(req,res){66 Project.find({},function(err,allProjects){67 if(err){68 console.log(err);69 }70 else{71 res.render("project",{user:req.user,projects:allProjects});72 }73 });7475});767778app.get("/projects/new",middleware.isLoggedIn,function(req,res){79 res.render("new",{user:req.user});80});81app.post("/projects",function(req,res){82 const title = req.body.title;83 const description = req.body.description;84 const technology = req.body.technology;85 const max = req.body.members;86 var user = {87 id:req.user,88 username:req.user.email89 }90 const newproject = new Project({91 title:title,92 descrip:description,93 technologies:technology,94 max:max,95 need:max,96 owner:user97 });9899 100 newproject.save(function(err){101 if(!err){102 req.user.projects.push(newproject._id);103 req.user.save();104 res.redirect("/projects");105 }106 });107})108109app.get("/projects/:id",function(req,res){110 const projectId = req.params.id;111 Project.findById(projectId,function(err,foundProject){112 if(err){113 console.log(err);114 }115 else{116 res.render("show",{project:foundProject,user:req.user});117 }118 })119120121});122123124app.get("/userprofile/editproject",middleware.isLoggedIn,function(req,res){125 User.findById(req.user.id).populate("projects").exec(function(err,foundUser){126 if(err){127 console.log(err);128 }129 else{130 res.render("editproject",{userprojects:foundUser,user:req.user});131132 }133 });134 135});136137app.get("/userprofile",middleware.isLoggedIn,function(req,res){138 Appliedproject.find({}).remove().exec();139 User.findById(req.user._id,function(err,foundUser){140 141142 143 console.log(foundUser.projects);144 User.find({appliedProjects:{$in:foundUser.projects}},function(err,foundApplications){145 if(err){146 console.log(err);147 }148 else{149 console.log(foundApplications);150 151 152 foundApplications.forEach(function(foundApplication){153 console.log(foundApplication.appliedProjects);154 foundApplication.appliedProjects.forEach(function(project){155 156 157 Project.findById(project,function(err,foundProject){158 if(err){159 console.log(err);160 }161 else { 162163 User.findById(foundProject.owner.id,function(err,foundOwner){164 if(err){165 console.log(err);166 }167 else{168 //console.log(foundOwner.username);169 if(foundOwner.username === req.user.username){170 console.log(foundProject.title,foundApplication.email);171 172 let appliedProjectss = new Appliedproject(173 { 174 id:foundProject._id,175 title:foundProject.title,176 name:foundApplication.email,177 userId:foundApplication._id178 }179 );180 appliedProjectss.save();181 182 183 184 }185 186 }187 188 189 190 191 })192 193 194 }195 196 })197 })198 });199 200 }201 })202203 204205 });206 res.render("profile",{user:req.user});207});208209210app.get("/userprofile/:id",function(req,res){211 var profileuser = req.params.id;212 User.findById(profileuser,function(err,foundUser){213 if(err){214 console.log(err);215 }216 else217 {218 219 res.render("userprofile",{puser:foundUser,user:req.user});220 }221 })222 223 });224225226 app.get("/editprofile",middleware.isLoggedIn,function(req,res){227 res.render("editprofile",{user:req.user,puser:req.user});228})229230231app.put("/userprofile",middleware.isLoggedIn, upload.single('myImage'),function(req,res){232 var img = fs.readFileSync(req.file.path);233 var encode_image = img.toString('base64'); 234 var finalImg = { // Define a JSONobject for the image attributes for saving to database235 contentType: req.file.mimetype,236 path:req.file.path,237 image: new Buffer(encode_image, 'base64')238 };239 var userData = {240 username: req.body.username,241 about: req.body.about, 242 img:finalImg,243 email:req.body.email,244 institute:req.body.institute, 245 language:req.body.language,246 github:req.body.github,247 linkedIn:req.body.linkedIn248249 }250 User.findByIdAndUpdate(req.user.id,userData,function(err,updateUser){251 if(err){252 console.log(err);253 res.redirect("/userprofile");254 }255 else{256 console.log(userData);257 console.log(updateUser);258 res.redirect("/userprofile");259 }260 })261});262263app.get("/projects/editproject/:id",middleware.isLoggedIn,function(req,res){264 const projectId = req.params.id;265 Project.findById(projectId,function(err,foundProject){266 if(err){267 console.log(err);268 }269 else{270 res.render("newedit",{user:req.user,project:foundProject});271 }272 })273274});275276app.put("/projects/editproject/:id",middleware.isLoggedIn,function(req,res){277 const projectId = req.params.id278 const title = req.body.title;279 const description = req.body.description;280 const technology = req.body.technology;281 const max = req.body.members;282 var user = {283 id:req.user,284 username:req.user.email285 }286 const updatedProject = {287 title:title,288 descrip:description,289 technologies:technology,290 max:max,291 need:max,292 owner:user293 };294 295 Project.findByIdAndUpdate(projectId,updatedProject,function(err,updated){296 if(err){297 console.log(err);298 res.redirect("/editproject/editproject");299 }300 else{301 console.log(updatedProject);302 console.log(updated);303 res.redirect("/userprofile/editproject");304 }305 })306});307308app.delete("/projects/editproject/delete/:id",middleware.isLoggedIn,function(req,res){309310 Project.findById(req.params.id,function(err,foundProject){311 if(err){312 console.log(err);313314 }315 else{316 User.findById(foundProject.owner.id,function(err,foundOwner){317 console.log(foundOwner.username);318 console.log(req.user.username);319 if(req.user.username === foundOwner.username){320 Project.findByIdAndRemove(req.params.id,function(err,foundProject){321 if(err){322 console.log(err);323 }324 else{325 console.log(foundOwner.projects);326 console.log(foundProject._id);327 328 // User.update({_id:req.user._id},{$pull:{projects:{$in:["5fc481fb447417376853704e"]}} },{multi:true});329 // User.updateOne({_id: req.user._id}, {$pull: { projects: { $in: [foundProject._id] } }})330 const index = foundOwner.projects.indexOf(foundProject._id);331 if (index > -1) {332 var p=foundOwner.projects.splice(index, 1);333 }334 335 console.log(foundOwner.projects);336 foundOwner.save();337 res.redirect("/userprofile/editproject");338 339 }340 })341 }342 })343 344 }345 })346347});348349350351352353 app.get("/showgotrequest",middleware.isLoggedIn,function(req,res){354355356357 358 Appliedproject.find({},function(err,foundappliedprojects){359 if(err){360 console.log(err);361 }362 else{363 console.log(foundappliedprojects);364 res.render("gotRequests",{user:req.user,applications:foundappliedprojects});365 366 }367 })368 })369 370 371372app.post("/showgotrequest/:id/:userId/accept",function(req,res){373 let flag1=0;374 const projectId = req.params.id;375 const userId = req.params.userId;376 Project.findById(projectId,function(err,foundProject){377 if(err){378 console.log(err);379 }380 else{381 foundProject.team.forEach(function(member){382 if(member.equals(userId)){383 flag1=1;384 }385 })386 if(flag1===0){387 foundProject.team.push(userId);388 foundProject.need=foundProject.need-1;389 foundProject.save();390 }391 }392 })393 res.redirect("/showgotrequest");394})395app.post("/showgotrequest/:id/:userId/reject",function(req,res){396 const projectId = req.params.id;397 const userId = req.params.userId;398 Project.findById(projectId,function(err,foundProject){399 if(err){400 console.log(err);401 }402 else{403 404 const index = foundProject.team.indexOf(userId);405 if (index > -1) {406 var p=foundProject.team.splice(index, 1);407 foundProject.need=foundProject.need+1;408 }409 410 foundProject.save();411 }412 })413 res.redirect("/showgotrequest");414 415})416417418419420app.get("/request",middleware.isLoggedIn,function(req,res){421 422 User.findById(req.user._id,function(err,foundUser){423 if(err){424 console.log(err);425 }426 else{427 console.log(foundUser.appliedProjects);428 Project.find({_id:{$in:foundUser.appliedProjects}},function(err,foundProjects){429 console.log(foundProjects);430 if(err){431 console.log(err);432 }433 else{434 res.render("requests",{user:req.user,appliedprojects:foundProjects});435 }436 })437 438 }439 })440 441});442443app.post("/request/:id",middleware.isLoggedIn,function(req,res){444445 const projectId = req.params.id;446 User.findById(req.user._id,function(err,foundUser){447 if(err){448 console.log(err);449 res.redirect("/projects");450 }451 else{452 var flag=0;453 foundUser.appliedProjects.forEach(function(project){454 console.log(projectId);455 console.log(project);456 if(project.equals(projectId)){457 flag=1;458 459 }460 461 })462 console.log(flag);463 if(flag === 0){464 Project.findById(projectId,function(err,found){465 if(err){466 console.log(err);467 }468 else{469 User.findById(found.owner.id,function(err,foundOwner){470 if(err){471 console.log(err);472 }473 else{474 if(foundOwner.username != req.user.username)475 {476 console.log(foundOwner.username);477 console.log(req.user.username);478 foundUser.appliedProjects.push(projectId);479 foundUser.save();480 }481 }482 })483 }484 })485 486 }487 res.redirect("/projects");488 489 490 }491 492 })493})494495app.post("/request/:id/delete",middleware.isLoggedIn,function(req,res){496 const projectId = req.params.id;497 498 Project.findById(projectId,function(err,foundProject){499 if(err){500 console.log(err);501 }502 else{503 504 const index = foundProject.team.indexOf(req.user._id);505 if (index > -1) {506 var p=foundProject.team.splice(index, 1);507 foundProject.need=foundProject.need+1;508 }509 510 foundProject.save();511 }512 })513514 User.findById({_id:req.user._id},function(err,foundUser){515 if(err){516 console.log(err);517518 }519 else{520 const index = foundUser.appliedProjects.indexOf(projectId);521 if (index > -1) {522 var p=foundUser.appliedProjects.splice(index, 1);523 }524 525 foundUser.save();526 res.redirect("/request");527 }528 })529530})531532533let port=process.env.PORT;534if(port==null||port==""){535 port=9000;536}537app.listen(port, function () {538 console.log("Server started successfully at port 9000");
...
class.js
Source:class.js
1class Grass {2 constructor(x, y) {3 this.x = x;4 this.y = y;5 this.multiplay = 0;6 this.directions = [7 [this.x - 1, this.y - 1],8 [this.x, this.y - 1],9 [this.x + 1, this.y - 1],10 [this.x - 1, this.y],11 [this.x + 1, this.y],12 [this.x - 1, this.y + 1],13 [this.x, this.y + 1],14 [this.x + 1, this.y + 1]15 ];16 }17 search(char) {18 let found = [];19 for (let i in this.directions) {20 let x = this.directions[i][0];21 let y = this.directions[i][1];22 if (x >= 0 && x < matrix[0].length && y >= 0 && y < matrix.length) {23 if (matrix[y][x] == char) {24 found.push(this.directions[i])25 }26 }27 }28 return found;29 }30 mul() {31 let found = this.search(0);32 var foundRand = random(found);33 this.multiplay++;34 if (this.multiplay >= 3 && foundRand) {35 let x = foundRand[0];36 let y = foundRand[1];37 matrix[y][x] = 138 let gr1 = new Grass(x, y);39 grassArr.push(gr1);40 this.multiplay = 041 }42 }43}44class GrassEater {45 constructor(x, y) {46 this.x = x;47 this.y = y;48 this.energy = 20;49 this.directions = [];50 }51 getNewCoordinates() {52 this.directions = [53 [this.x - 1, this.y - 1],54 [this.x, this.y - 1],55 [this.x + 1, this.y - 1],56 [this.x - 1, this.y],57 [this.x + 1, this.y],58 [this.x - 1, this.y + 1],59 [this.x, this.y + 1],60 [this.x + 1, this.y + 1]61 ];62 }63 search(char) {64 this.getNewCoordinates();65 let found = [];66 for (let i in this.directions) {67 let x = this.directions[i][0];68 let y = this.directions[i][1];69 if (x >= 0 && x < matrix[0].length && y >= 0 && y < matrix.length) {70 if (matrix[y][x] == char) {71 found.push(this.directions[i])72 }73 }74 }75 return found;76 }77 mul() {78 let found = this.search(0);79 var foundRand = random(found);80 if (foundRand) {81 let x = foundRand[0];82 let y = foundRand[1];83 matrix[y][x] = 284 let newGrassEat = new GrassEater(x, y);85 grassEatArr.push(newGrassEat);86 this.energy = 287 }88 }89 move() {90 this.energy--91 let found = this.search(0);92 var foundRand = random(found);93 if (foundRand && this.energy >= 0) {94 let x = foundRand[0];95 let y = foundRand[1];96 matrix[y][x] = matrix[this.y][this.x]97 matrix[this.y][this.x] = 098 this.x = x99 this.y = y100 } else {101 this.die()102 }103 }104 eat() {105 let found = this.search(1);106 var foundRand = random(found);107 let found1 = this.search(4);108 let found1Rand = random(found1);109 let found2 = this.search(5)110 let found2Rand = random(found2)111 if (found1Rand) {112 let x = found1Rand[0];113 let y = found1Rand[1];114 matrix[y][x] = matrix[this.y][this.x]115 matrix[this.y][this.x] = 0116 this.x = x117 this.y = y118 this.mul()119 for (var i in mulBoostArr) {120 if (x == mulBoostArr[i].x && y == mulBoostArr[i].y) {121 mulBoostArr.splice(i, 1);122 break;123 }124 }125 }126 else if (found2Rand) {127 let x = found2Rand[0];128 let y = found2Rand[1];129 matrix[y][x] = 3130 matrix[this.y][this.x] = 0131 this.x = x132 this.y = y133 this.die()134 for (let i in virusArr) {135 if (x == virusArr[i].x && y == virusArr[i].y) {136 virusArr.splice(i, 1);137 break;138 }139 }140 }141 else if (foundRand) {142 this.energy++143 let x = foundRand[0];144 let y = foundRand[1];145 matrix[y][x] = matrix[this.y][this.x]146 matrix[this.y][this.x] = 0147 this.x = x148 this.y = y149 for (var i in grassArr) {150 if (x == grassArr[i].x && y == grassArr[i].y) {151 grassArr.splice(i, 1);152 break;153 }154 }155 if (this.energy >= 20) {156 this.mul()157 }158 }159 else {160 this.move()161 }162 }163 die() {164 matrix[this.y][this.x] = 0165 for (var i in grassEatArr) {166 if (this.x == grassEatArr[i].x && this.y == grassEatArr[i].y) {167 grassEatArr.splice(i, 1);168 break;169 }170 }171 }172}173class Predator {174 constructor(x, y) {175 this.x = x;176 this.y = y;177 this.energy = 8;178 this.directions = [];179 }180 getNewCoordinates() {181 this.directions = [182 [this.x - 1, this.y - 1],183 [this.x, this.y - 1],184 [this.x + 1, this.y - 1],185 [this.x - 1, this.y],186 [this.x + 1, this.y],187 [this.x - 1, this.y + 1],188 [this.x, this.y + 1],189 [this.x + 1, this.y + 1]190 ];191 }192 search(char) {193 this.getNewCoordinates();194 let found = [];195 for (let i in this.directions) {196 let x = this.directions[i][0];197 let y = this.directions[i][1];198 if (x >= 0 && x < matrix[0].length && y >= 0 && y < matrix.length) {199 if (matrix[y][x] == char) {200 found.push(this.directions[i])201 }202 }203 }204 return found;205 }206 move() {207 this.energy--208 let found = this.search(0);209 var foundRand = random(found);210 if (foundRand && this.energy >= 0) {211 let x = foundRand[0];212 let y = foundRand[1];213 matrix[y][x] = matrix[this.y][this.x]214 matrix[this.y][this.x] = 0215 this.x = x216 this.y = y217 } else {218 this.die()219 }220 }221 mul() {222 let found = this.search(0);223 var foundRand = random(found);224 if (foundRand) {225 let x = foundRand[0];226 let y = foundRand[1];227 matrix[y][x] = 3228 let pred = new Predator(x, y);229 predatorArr.push(pred);230 this.energy = 3231 }232 }233 eat() {234 let found = this.search(1);235 var foundRand = random(found);236 let found1 = this.search(2)237 let foundRand1 = random(found1)238 let found2 = this.search(4)239 let foundRand2 = random(found2)240 let found3 = this.search(5)241 let foundRand3 = random(found3)242 if (foundRand1) {243 this.energy++244 let x = foundRand1[0];245 let y = foundRand1[1];246 matrix[y][x] = 3247 matrix[this.y][this.x] = 0248 this.x = x249 this.y = y250 for (var i in grassEatArr) {251 if (x == grassEatArr[i].x && y == grassEatArr[i].y) {252 grassEatArr.splice(i, 1);253 break;254 }255 }256 if (this.energy >= 40) {257 this.mul();258 }259 }260 else if (foundRand2) {261 let x = foundRand2[0];262 let y = foundRand2[1];263 matrix[y][x] = 3264 matrix[this.y][this.x] = 0265 this.x = x266 this.y = y267 this.mul()268 for (let i in mulBoostArr) {269 if (x == mulBoostArr[i].x && y == mulBoostArr[i].y) {270 mulBoostArr.splice(i, 1);271 break;272 }273 }274 }275 else if (foundRand3) {276 let x = foundRand3[0];277 let y = foundRand3[1];278 matrix[y][x] = 3279 matrix[this.y][this.x] = 0280 this.x = x281 this.y = y282 this.die()283 for (let i in virusArr) {284 if (x == virusArr[i].x && y == virusArr[i].y) {285 virusArr.splice(i, 1);286 break;287 }288 }289 }290 291 else if (foundRand) {292 this.energy++293 let x = foundRand[0];294 let y = foundRand[1];295 matrix[y][x] = 3296 matrix[this.y][this.x] = 0297 this.x = x298 this.y = y299 for (var i in grassArr) {300 if (x == grassArr[i].x && y == grassArr[i].y) {301 grassArr.splice(i, 1);302 break;303 }304 }305 if (this.energy >= 50) {306 this.mul();307 }308 }309 else {310 this.move()311 }312 }313 die() {314 matrix[this.y][this.x] = 0315 for (var i in predatorArr) {316 if (this.x == predatorArr[i].x && this.y == predatorArr[i].y) {317 predatorArr.splice(i, 1);318 break;319 }320 }321 }322}323class Mulboost {324 constructor(x, y) {325 this.x = x326 this.y = y327 this.directions = [];328 }329 getNewCoordinates() {330 this.directions = [331 [this.x - 1, this.y - 1],332 [this.x, this.y - 1],333 [this.x + 1, this.y - 1],334 [this.x - 1, this.y],335 [this.x + 1, this.y],336 [this.x - 1, this.y + 1],337 [this.x, this.y + 1],338 [this.x + 1, this.y + 1]339 ];340 }341 search(char) {342 this.getNewCoordinates();343 let found = [];344 for (let i in this.directions) {345 let x = this.directions[i][0];346 let y = this.directions[i][1];347 if (x >= 0 && x < matrix[0].length && y >= 0 && y < matrix.length) {348 if (matrix[y][x] == char) {349 found.push(this.directions[i])350 }351 }352 }353 return found;354 }355 move() {356 let found = this.search(0);357 var foundRand = random(found);358 if (foundRand) {359 let x = foundRand[0];360 let y = foundRand[1];361 matrix[y][x] = matrix[this.y][this.x]362 matrix[this.y][this.x] = 0363 this.x = x364 this.y = y365 }366 }367}368class Virus {369 constructor(x, y) {370 this.x = x;371 this.y = y;372 this.directions = [];373 }374 375 getNewCoordinates() {376 this.directions = [377 [this.x - 1, this.y - 1],378 [this.x, this.y - 1],379 [this.x + 1, this.y - 1],380 [this.x - 1, this.y],381 [this.x + 1, this.y],382 [this.x - 1, this.y + 1],383 [this.x, this.y + 1],384 [this.x + 1, this.y + 1]385 ];386 }387 388 search(char) {389 this.getNewCoordinates();390 let found = [];391 for (let i in this.directions) {392 let x = this.directions[i][0];393 let y = this.directions[i][1];394 if (x >= 0 && x < matrix[0].length && y >= 0 && y < matrix.length) {395 if (matrix[y][x] == char) {396 found.push(this.directions[i])397 }398 }399 }400 return found;401 }402 move() {403 let found = this.search(1);404 var foundRand = random(found);405 if (foundRand) {406 let x = foundRand[0];407 let y = foundRand[1];408 matrix[y][x] = matrix[this.y][this.x]409 matrix[this.y][this.x] = 1410 this.x = x411 this.y = y412 }413 }...
participateController.js
Source:participateController.js
1'use strict';2// import {Training} from "../../../src/app/trainings/training";3/**4 * Participate Controller5 * @module participateController6 * @require jwtHelper7 * @require models8 * @require asyncLib9 */10//TODO Use the isSubscribe attribute in DB to know who is participating and who has canceled11const12 jwtHelper = require('../../helpers/jwtHelper'),13 models = require('../../database/models'),14 asyncLib = require('async'),15 unsubscribe = 0,16 subscribe = 1;17let subscribeTraining,18 unsubscribeTraining,19 isParticipateTraining,20 ParticipateUserTraining;21/**22 * @function subscribeTraining23 * @desc Make a user participate to a training if he is authenticated24 * @param req25 * @param res26 * @returns {Object} Training27 */28subscribeTraining = (req, res) =>{29 // Getting auth header30 let headerAuth = req.headers['authorization'];31 let userId = jwtHelper.getUserId(headerAuth);32 let trainingId = parseInt(req.params.trainingId);33 console.log("training id est " + trainingId);34 console.log("user id est " + userId);35 if(trainingId <=0){36 return res.status(400).json({'error': 'invalid parameters'});37 }38 asyncLib.waterfall([39 function(done) {40 models.Training.findOne({41 where: {id: trainingId}42 })43 .then(function(trainingFound){44 done(null, trainingFound);45 })46 .catch(function(err){47 console.log(err);48 return res.status(500).json({ 'error': 'unable to verify training'})49 });50 },51 function(trainingFound, done){52 if(trainingFound) {53 models.User.findOne({54 where: { id: userId}55 })56 .then(function(userFound){57 done(null, trainingFound, userFound);58 })59 .catch(function(err){60 console.log(err);61 return res.status(500).json({ 'error': 'unable to verify user'})62 });63 }else{64 res.status(404).json({ 'error': 'the training doesn\'t exist'});65 }66 },67 function(trainingFound, userFound, done){68 if(userFound){69 models.Participate.findOne({70 where: {71 userId: userId,72 trainingId: trainingId73 }74 })75 .then(function(userAlreadyParticipate){76 done(null, trainingFound, userFound, userAlreadyParticipate);77 })78 .catch(function(err){79 console.log(err);80 return res.status(500).json({ 'error': 'unable to verify if the user already participate to the training'});81 })82 }else{83 res.status(404).json({ 'error': 'the user doesn\'t exist'})84 }85 },86 function(trainingFound, userFound, userAlreadyParticipate, done){87 if(!userAlreadyParticipate && trainingFound.availableSeat > 0){88 trainingFound.addUser(userFound)89 .then(function (alreadyParticipate){90 done(null, trainingFound, userFound);91 })92 .catch(function (err){93 console.log(err);94 return res.status(500).json({ 'error' : 'unable to set user participation'});95 })96 }else {97 res.status(409).json({ 'error': 'user already participate or there is no more available seat' });98 }99 },100 function(trainingFound, userFound, done){101 if(trainingFound.availableSeat > 0){102 trainingFound.update({103 availableSeat: trainingFound.availableSeat - 1,104 }).then(function(){105 done(trainingFound);106 }).catch(function(err){107 res.status(500).json({ 'error': 'can\'t update the training\'s available seat'});108 });109 }else{110 res.status(409).json({ 'error': 'There is no more available seat' });111 }112 },113 ], function(trainingFound) {114 if(trainingFound){115 return res.status(201).json(trainingFound);116 }else{117 return res.status(500).json({'error': 'can\'t update available seat'})118 }119 }120 )121};122/**123 * @function unsubscribeTraining124 * @desc Make a user unsubscribe to a training if he is authenticated and if he subscribe to it in a first place125 * @param req126 * @param res127 * @returns {Object} Training128 */129unsubscribeTraining = (req, res) => {130 // Getting auth header131 let headerAuth = req.headers['authorization'];132 let userId = jwtHelper.getUserId(headerAuth);133 let trainingId = parseInt(req.params.trainingId);134 if(trainingId <=0){135 return res.status(400).json({'error': 'invalid parameters'});136 }137 asyncLib.waterfall([138 function(done) {139 models.Training.findOne({140 where: {id: trainingId}141 })142 .then(function(trainingFound){143 done(null, trainingFound);144 })145 .catch(function(err){146 console.log(err);147 return res.status(500).json({ 'error': 'unable to verify training'})148 });149 },150 function(trainingFound, done){151 if(trainingFound) {152 models.User.findOne({153 where: { id: userId}154 })155 .then(function(userFound){156 done(null, trainingFound, userFound);157 })158 .catch(function(err){159 console.log(err);160 return res.status(500).json({ 'error': 'unable to verify user'})161 });162 }else{163 res.status(404).json({ 'error': 'the training doesn\'t exist'});164 }165 },166 function(trainingFound, userFound, done){167 if(userFound){168 models.Participate.findOne({169 where: {170 userId: userId,171 trainingId: trainingId172 }173 })174 .then(function(userAlreadyParticipate){175 done(null, trainingFound, userFound, userAlreadyParticipate);176 })177 .catch(function(err){178 console.log(err);179 return res.status(500).json({ 'error': 'unable to verify if the user already participate to the training'});180 })181 }else{182 res.status(404).json({ 'error': 'the user doesn\'t exist'})183 }184 },185 function(trainingFound, userFound, userAlreadyParticipate, done){186 if(userAlreadyParticipate){187 userAlreadyParticipate.destroy()188 .then(function (doNotParticipate){189 done(null, trainingFound, userFound);190 })191 .catch(function (err){192 console.log(err);193 return res.status(500).json({ 'error' : 'cannot remove user participation'});194 })195 }else{196 res.status(409).json({'error': 'the user has already unsubscribe to the training'})197 }198 },199 function(trainingFound, userFound, done){200 trainingFound.update({201 availableSeat: trainingFound.availableSeat + 1,202 }).then(function(){203 done(trainingFound);204 }).catch(function(err){205 console.log(err);206 res.status(500).json({ 'error': 'can\'t update the training\'s available seat'});207 });208 },209 ], function(trainingFound) {210 if(trainingFound){211 return res.status(201).json(trainingFound);212 }else{213 return res.status(500).json({'error': 'can\'t update available seat'})214 }215 }216 )217};218/**219 * @function unsubscribeTraining220 * @desc Let know if a user is already participating in training221 * @param req222 * @param res223 * @returns {Object} Training224 */225isParticipateTraining = (req, res) => {226 // Getting auth header227 let headerAuth = req.headers['authorization'],228 userId = jwtHelper.getUserId(headerAuth),229 trainingId = parseInt(req.params.trainingId);230 let participate = false;231 console.log("training id est " + trainingId);232 console.log("user id est " + userId);233 if(trainingId <=0){234 return res.status(400).json({'error': 'invalid parameters'});235 }236 asyncLib.waterfall([237 function(done) {238 models.Training.findOne({239 where: {id: trainingId}240 })241 .then(function(trainingFound){242 done(null, trainingFound);243 })244 .catch(function(err){245 console.log(err);246 return res.status(500).json({ 'error': 'unable to verify training'})247 });248 },249 function(trainingFound, done){250 if(trainingFound) {251 models.User.findOne({252 where: { id: userId}253 })254 .then(function(userFound){255 done(null, trainingFound, userFound);256 })257 .catch(function(err){258 console.log(err);259 return res.status(500).json({ 'error': 'unable to verify user'})260 });261 }else{262 res.status(404).json({ 'error': 'the training doesn\'t exist'});263 }264 },265 function(trainingFound, userFound, done){266 if(userFound){267 models.Participate.findOne({268 where: {269 userId: userId,270 trainingId: trainingId271 }272 })273 .then(function(userAlreadyParticipate){274 if(userAlreadyParticipate){275 participate = true;276 }277 done(null, trainingFound, userFound, userAlreadyParticipate);278 })279 .catch(function(err){280 console.log(err);281 return res.status(500).json({ 'error': 'unable to verify if the user already participate to the training'});282 })283 }else{284 res.status(404).json({ 'error': 'the user doesn\'t exist'})285 }286 },287 ], function(trainingFound) {288 if(participate){289 return res.status(201).json(participate);290 }else{291 return res.status(201).json(participate)292 }293 }294 )295};296/**297 * @function unsubscribeTraining298 * @desc Send back the training for which the user have been subscribed299 * @param req300 * @param res301 * @returns {Object} Training302 */303ParticipateUserTraining = (req, res) => {304 // Getting auth header305 let headerAuth = req.headers['authorization'],306 userId = jwtHelper.getUserId(headerAuth);307 models.Participate.findAll({308 include: [{309 model: models.Training, as: 'training',310 }],311 where: {userId: userId}312 }).then(function(training) {313 if (training) {314 res.status(200).json(training);315 } else {316 res.status(404).json({ "error": "no Training found" });317 }318 }).catch(function(err) {319 console.log(err);320 res.status(500).json({ "error": "invalid fields" });321 });322};323module.exports = {324 subscribeTraining,325 unsubscribeTraining,326 isParticipateTraining,327 ParticipateUserTraining...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!