Paul Klimov
7 years ago
13 changed files with 0 additions and 5405 deletions
@ -1,313 +0,0 @@
|
||||
IF OBJECT_ID('[dbo].[order_item]', 'U') IS NOT NULL DROP TABLE [dbo].[order_item]; |
||||
IF OBJECT_ID('[dbo].[order_item_with_null_fk]', 'U') IS NOT NULL DROP TABLE [dbo].[order_item_with_null_fk]; |
||||
IF OBJECT_ID('[dbo].[item]', 'U') IS NOT NULL DROP TABLE [dbo].[item]; |
||||
IF OBJECT_ID('[dbo].[order]', 'U') IS NOT NULL DROP TABLE [dbo].[order]; |
||||
IF OBJECT_ID('[dbo].[order_with_null_fk]', 'U') IS NOT NULL DROP TABLE [dbo].[order_with_null_fk]; |
||||
IF OBJECT_ID('[dbo].[category]', 'U') IS NOT NULL DROP TABLE [dbo].[category]; |
||||
IF OBJECT_ID('[dbo].[customer]', 'U') IS NOT NULL DROP TABLE [dbo].[customer]; |
||||
IF OBJECT_ID('[dbo].[profile]', 'U') IS NOT NULL DROP TABLE [dbo].[profile]; |
||||
IF OBJECT_ID('[dbo].[type]', 'U') IS NOT NULL DROP TABLE [dbo].[type]; |
||||
IF OBJECT_ID('[dbo].[null_values]', 'U') IS NOT NULL DROP TABLE [dbo].[null_values]; |
||||
IF OBJECT_ID('[dbo].[negative_default_values]', 'U') IS NOT NULL DROP TABLE [dbo].[negative_default_values]; |
||||
IF OBJECT_ID('[dbo].[animal]', 'U') IS NOT NULL DROP TABLE [dbo].[animal]; |
||||
IF OBJECT_ID('[dbo].[default_pk]', 'U') IS NOT NULL DROP TABLE [dbo].[default_pk]; |
||||
IF OBJECT_ID('[dbo].[document]', 'U') IS NOT NULL DROP TABLE [dbo].[document]; |
||||
IF OBJECT_ID('[dbo].[dossier]', 'U') IS NOT NULL DROP TABLE [dbo].[dossier]; |
||||
IF OBJECT_ID('[dbo].[employee]', 'U') IS NOT NULL DROP TABLE [dbo].[employee]; |
||||
IF OBJECT_ID('[dbo].[department]', 'U') IS NOT NULL DROP TABLE [dbo].[department]; |
||||
IF OBJECT_ID('[dbo].[animal_view]', 'V') IS NOT NULL DROP VIEW [dbo].[animal_view]; |
||||
IF OBJECT_ID('[T_constraints_4]', 'U') IS NOT NULL DROP TABLE [T_constraints_4]; |
||||
IF OBJECT_ID('[T_constraints_3]', 'U') IS NOT NULL DROP TABLE [T_constraints_3]; |
||||
IF OBJECT_ID('[T_constraints_2]', 'U') IS NOT NULL DROP TABLE [T_constraints_2]; |
||||
IF OBJECT_ID('[T_constraints_1]', 'U') IS NOT NULL DROP TABLE [T_constraints_1]; |
||||
IF OBJECT_ID('[T_upsert]', 'U') IS NOT NULL DROP TABLE [T_upsert]; |
||||
|
||||
CREATE TABLE [dbo].[profile] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
[description] [varchar](128) NOT NULL, |
||||
CONSTRAINT [PK_profile] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[customer] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
[email] [varchar](128) NOT NULL, |
||||
[name] [varchar](128), |
||||
[address] [text], |
||||
[status] [int] DEFAULT 0, |
||||
[profile_id] [int], |
||||
CONSTRAINT [PK_customer] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[category] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
[name] [varchar](128) NOT NULL, |
||||
CONSTRAINT [PK_category] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[item] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
[name] [varchar](128) NOT NULL, |
||||
[category_id] [int] NOT NULL, |
||||
CONSTRAINT [PK_item] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[order] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
[customer_id] [int] NOT NULL, |
||||
[created_at] [int] NOT NULL, |
||||
[total] [decimal](10,0) NOT NULL, |
||||
CONSTRAINT [PK_order] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[order_with_null_fk] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
[customer_id] [int] , |
||||
[created_at] [int] NOT NULL, |
||||
[total] [decimal](10,0) NOT NULL, |
||||
CONSTRAINT [PK_order_with_null_fk] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[order_item] ( |
||||
[order_id] [int] NOT NULL, |
||||
[item_id] [int] NOT NULL, |
||||
[quantity] [int] NOT NULL, |
||||
[subtotal] [decimal](10,0) NOT NULL, |
||||
CONSTRAINT [PK_order_item] PRIMARY KEY CLUSTERED ( |
||||
[order_id] ASC, |
||||
[item_id] ASC |
||||
) ON [PRIMARY] |
||||
|
||||
);CREATE TABLE [dbo].[order_item_with_null_fk] ( |
||||
[order_id] [int], |
||||
[item_id] [int], |
||||
[quantity] [int] NOT NULL, |
||||
[subtotal] [decimal](10,0) NOT NULL |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[null_values] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
var1 [int] NULL, |
||||
var2 [int] NULL, |
||||
var3 [int] DEFAULT NULL, |
||||
stringcol [varchar](32) DEFAULT NULL, |
||||
PRIMARY KEY (id) |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[negative_default_values] ( |
||||
[tinyint_col] [tinyint] DEFAULT '-123', |
||||
[smallint_col] [tinyint] DEFAULT '-123', |
||||
[int_col] [smallint] DEFAULT '-123', |
||||
[bigint_col] [int] DEFAULT '-123', |
||||
[float_col] [float] DEFAULT '-12345.6789', |
||||
[numeric_col] [decimal](5,2) DEFAULT '-33.22' |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[type] ( |
||||
[int_col] [int] NOT NULL, |
||||
[int_col2] [int] DEFAULT '1', |
||||
[tinyint_col] [tinyint] DEFAULT '1', |
||||
[smallint_col] [smallint] DEFAULT '1', |
||||
[char_col] [char](100) NOT NULL, |
||||
[char_col2] [varchar](100) DEFAULT 'something', |
||||
[char_col3] [text], |
||||
[float_col] [decimal](4,3) NOT NULL, |
||||
[float_col2] [float] DEFAULT '1.23', |
||||
[blob_col] [varbinary](MAX), |
||||
[numeric_col] [decimal](5,2) DEFAULT '33.22', |
||||
[time] [datetime] NOT NULL DEFAULT '2002-01-01 00:00:00', |
||||
[bool_col] [tinyint] NOT NULL, |
||||
[bool_col2] [tinyint] DEFAULT '1' |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[animal] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
[type] [varchar](255) NOT NULL, |
||||
CONSTRAINT [PK_animal] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[default_pk] ( |
||||
[id] [int] NOT NULL DEFAULT 5, |
||||
[type] [varchar](255) NOT NULL, |
||||
CONSTRAINT [PK_default_pk] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[document] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
[title] [varchar](255) NOT NULL, |
||||
[content] [text], |
||||
[version] [int] NOT NULL DEFAULT 0, |
||||
CONSTRAINT [PK_document_pk] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[department] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
[title] [varchar](255) NOT NULL, |
||||
CONSTRAINT [PK_department_pk] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[employee] ( |
||||
[id] [int] NOT NULL, |
||||
[department_id] [int] NOT NULL, |
||||
[first_name] [varchar](255) NOT NULL, |
||||
[last_name] [varchar](255) NOT NULL, |
||||
CONSTRAINT [PK_employee_pk] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC, |
||||
[department_id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE TABLE [dbo].[dossier] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
[department_id] [int] NOT NULL, |
||||
[employee_id] [int] NOT NULL, |
||||
[summary] [varchar](255) NOT NULL, |
||||
CONSTRAINT [PK_dossier_pk] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
CREATE VIEW [dbo].[animal_view] AS SELECT * FROM [dbo].[animal]; |
||||
|
||||
INSERT INTO [dbo].[animal] (type) VALUES ('yiiunit\data\ar\Cat'); |
||||
INSERT INTO [dbo].[animal] (type) VALUES ('yiiunit\data\ar\Dog'); |
||||
|
||||
INSERT INTO [dbo].[profile] ([description]) VALUES ('profile customer 1'); |
||||
INSERT INTO [dbo].[profile] ([description]) VALUES ('profile customer 3'); |
||||
|
||||
INSERT INTO [dbo].[customer] ([email], [name], [address], [status], [profile_id]) VALUES ('user1@example.com', 'user1', 'address1', 1, 1); |
||||
INSERT INTO [dbo].[customer] ([email], [name], [address], [status]) VALUES ('user2@example.com', 'user2', 'address2', 1); |
||||
INSERT INTO [dbo].[customer] ([email], [name], [address], [status], [profile_id]) VALUES ('user3@example.com', 'user3', 'address3', 2, 2); |
||||
|
||||
INSERT INTO [dbo].[category] ([name]) VALUES ('Books'); |
||||
INSERT INTO [dbo].[category] ([name]) VALUES ('Movies'); |
||||
|
||||
INSERT INTO [dbo].[item] ([name], [category_id]) VALUES ('Agile Web Application Development with Yii1.1 and PHP5', 1); |
||||
INSERT INTO [dbo].[item] ([name], [category_id]) VALUES ('Yii 1.1 Application Development Cookbook', 1); |
||||
INSERT INTO [dbo].[item] ([name], [category_id]) VALUES ('Ice Age', 2); |
||||
INSERT INTO [dbo].[item] ([name], [category_id]) VALUES ('Toy Story', 2); |
||||
INSERT INTO [dbo].[item] ([name], [category_id]) VALUES ('Cars', 2); |
||||
|
||||
INSERT INTO [dbo].[order] ([customer_id], [created_at], [total]) VALUES (1, 1325282384, 110.0); |
||||
INSERT INTO [dbo].[order] ([customer_id], [created_at], [total]) VALUES (2, 1325334482, 33.0); |
||||
INSERT INTO [dbo].[order] ([customer_id], [created_at], [total]) VALUES (2, 1325502201, 40.0); |
||||
|
||||
INSERT INTO [dbo].[order_with_null_fk] ([customer_id], [created_at], [total]) VALUES (1, 1325282384, 110.0); |
||||
INSERT INTO [dbo].[order_with_null_fk] ([customer_id], [created_at], [total]) VALUES (2, 1325334482, 33.0); |
||||
INSERT INTO [dbo].[order_with_null_fk] ([customer_id], [created_at], [total]) VALUES (2, 1325502201, 40.0); |
||||
|
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 1, 1, 30.0); |
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 2, 2, 40.0); |
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 4, 1, 10.0); |
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 5, 1, 15.0); |
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 3, 1, 8.0); |
||||
INSERT INTO [dbo].[order_item] ([order_id], [item_id], [quantity], [subtotal]) VALUES (3, 2, 1, 40.0); |
||||
|
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 1, 1, 30.0); |
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (1, 2, 2, 40.0); |
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 4, 1, 10.0); |
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 5, 1, 15.0); |
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (2, 3, 1, 8.0); |
||||
INSERT INTO [dbo].[order_item_with_null_fk] ([order_id], [item_id], [quantity], [subtotal]) VALUES (3, 2, 1, 40.0); |
||||
|
||||
INSERT INTO [dbo].[document] ([title], [content], [version]) VALUES ('Yii 2.0 guide', 'This is Yii 2.0 guide', 0); |
||||
|
||||
SET IDENTITY_INSERT [dbo].[department] ON; |
||||
INSERT INTO [dbo].[department] (id, title) VALUES (1, 'IT'); |
||||
INSERT INTO [dbo].[department] (id, title) VALUES (2, 'accounting'); |
||||
SET IDENTITY_INSERT [dbo].[department] OFF; |
||||
|
||||
INSERT INTO [dbo].[employee] (id, department_id, first_name, last_name) VALUES (1, 1, 'John', 'Doe'); |
||||
INSERT INTO [dbo].[employee] (id, department_id, first_name, last_name) VALUES (1, 2, 'Ann', 'Smith'); |
||||
INSERT INTO [dbo].[employee] (id, department_id, first_name, last_name) VALUES (2, 2, 'Will', 'Smith'); |
||||
|
||||
SET IDENTITY_INSERT [dbo].[dossier] ON; |
||||
INSERT INTO [dbo].[dossier] (id, department_id, employee_id, summary) VALUES (1, 1, 1, 'Excellent employee.'); |
||||
INSERT INTO [dbo].[dossier] (id, department_id, employee_id, summary) VALUES (2, 2, 1, 'Brilliant employee.'); |
||||
INSERT INTO [dbo].[dossier] (id, department_id, employee_id, summary) VALUES (3, 2, 2, 'Good employee.'); |
||||
SET IDENTITY_INSERT [dbo].[dossier] OFF; |
||||
|
||||
/* bit test, see https://github.com/yiisoft/yii2/issues/9006 */ |
||||
|
||||
IF OBJECT_ID('[dbo].[bit_values]', 'U') IS NOT NULL DROP TABLE [dbo].[bit_values]; |
||||
|
||||
CREATE TABLE [dbo].[bit_values] ( |
||||
[id] [int] IDENTITY NOT NULL, |
||||
[val] [bit] NOT NULL, |
||||
CONSTRAINT [PK_bit_values] PRIMARY KEY CLUSTERED ( |
||||
[id] ASC |
||||
) ON [PRIMARY] |
||||
); |
||||
|
||||
INSERT INTO [dbo].[bit_values] ([val]) VALUES (0), (1); |
||||
|
||||
CREATE TABLE [T_constraints_1] |
||||
( |
||||
[C_id] INT NOT NULL IDENTITY PRIMARY KEY, |
||||
[C_not_null] INT NOT NULL, |
||||
[C_check] VARCHAR(255) NULL CHECK ([C_check] <> ''), |
||||
[C_unique] INT NOT NULL, |
||||
[C_default] INT NOT NULL DEFAULT 0, |
||||
CONSTRAINT [CN_unique] UNIQUE ([C_unique]) |
||||
); |
||||
|
||||
CREATE TABLE [T_constraints_2] |
||||
( |
||||
[C_id_1] INT NOT NULL, |
||||
[C_id_2] INT NOT NULL, |
||||
[C_index_1] INT NULL, |
||||
[C_index_2_1] INT NULL, |
||||
[C_index_2_2] INT NULL, |
||||
CONSTRAINT [CN_constraints_2_multi] UNIQUE ([C_index_2_1], [C_index_2_2]), |
||||
CONSTRAINT [CN_pk] PRIMARY KEY ([C_id_1], [C_id_2]) |
||||
); |
||||
|
||||
CREATE INDEX [CN_constraints_2_single] ON [T_constraints_2] ([C_index_1]); |
||||
|
||||
CREATE TABLE [T_constraints_3] |
||||
( |
||||
[C_id] INT NOT NULL, |
||||
[C_fk_id_1] INT NOT NULL, |
||||
[C_fk_id_2] INT NOT NULL, |
||||
CONSTRAINT [CN_constraints_3] FOREIGN KEY ([C_fk_id_1], [C_fk_id_2]) REFERENCES [T_constraints_2] ([C_id_1], [C_id_2]) ON DELETE CASCADE ON UPDATE CASCADE |
||||
); |
||||
|
||||
CREATE TABLE [T_constraints_4] |
||||
( |
||||
[C_id] INT NOT NULL IDENTITY PRIMARY KEY, |
||||
[C_col_1] INT NULL, |
||||
[C_col_2] INT NOT NULL, |
||||
CONSTRAINT [CN_constraints_4] UNIQUE ([C_col_1], [C_col_2]) |
||||
); |
||||
|
||||
CREATE TABLE [T_upsert] |
||||
( |
||||
[id] INT NOT NULL IDENTITY PRIMARY KEY, |
||||
[ts] INT NULL, |
||||
[email] VARCHAR(128) NOT NULL UNIQUE, |
||||
[recovery_email] VARCHAR(128) NULL, |
||||
[address] TEXT NULL, |
||||
[status] TINYINT NOT NULL DEFAULT 0, |
||||
[orders] INT NOT NULL DEFAULT 0, |
||||
[profile_id] INT NULL, |
||||
UNIQUE ([email], [recovery_email]) |
||||
); |
@ -1,437 +0,0 @@
|
||||
/** |
||||
* This is the database schema for testing Oracle support of Yii Active Record. |
||||
*/ |
||||
|
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "composite_fk"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "order_item"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "item"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "order_item_with_null_fk"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "order"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "order_with_null_fk"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "category"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "customer"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "profile"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "type"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "null_values"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "negative_default_values"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "constraints"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "bool_values"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "animal"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "default_pk"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "document"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "dossier"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "employee"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "department"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP VIEW "animal_view"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "validator_main"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "validator_ref"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "bit_values"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END; -- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "T_constraints_4"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "T_constraints_3"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "T_constraints_2"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "T_constraints_1"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP TABLE "T_upsert"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -942 THEN RAISE; END IF; END;-- |
||||
|
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "profile_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "customer_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "category_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "item_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "order_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "order_with_null_fk_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "null_values_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "bool_values_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "animal_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "document_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "T_upsert_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "department_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE "employee_SEQ"'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN RAISE; END IF; END;-- |
||||
|
||||
/* STATEMENTS */ |
||||
|
||||
CREATE TABLE "constraints" |
||||
( |
||||
"id" integer not null, |
||||
"field1" varchar2(255) |
||||
); |
||||
|
||||
CREATE TABLE "profile" ( |
||||
"id" integer not null, |
||||
"description" varchar2(128) NOT NULL, |
||||
CONSTRAINT "profile_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
|
||||
CREATE SEQUENCE "profile_SEQ"; |
||||
|
||||
CREATE TABLE "customer" ( |
||||
"id" integer not null, |
||||
"email" varchar2(128) NOT NULL UNIQUE, |
||||
"name" varchar2(128), |
||||
"address" varchar(4000), |
||||
"status" integer DEFAULT 0, |
||||
"bool_status" char DEFAULT 0 check ("bool_status" in (0,1)), |
||||
"profile_id" integer, |
||||
CONSTRAINT "customer_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
CREATE SEQUENCE "customer_SEQ"; |
||||
|
||||
comment on column "customer"."email" is 'someone@example.com'; |
||||
|
||||
CREATE TABLE "category" ( |
||||
"id" integer not null, |
||||
"name" varchar2(128) NOT NULL, |
||||
CONSTRAINT "category_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
CREATE SEQUENCE "category_SEQ"; |
||||
|
||||
CREATE TABLE "item" ( |
||||
"id" integer not null, |
||||
"name" varchar2(128) NOT NULL, |
||||
"category_id" integer NOT NULL references "category"("id") on DELETE CASCADE, |
||||
CONSTRAINT "item_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
CREATE SEQUENCE "item_SEQ"; |
||||
|
||||
CREATE TABLE "order" ( |
||||
"id" integer not null, |
||||
"customer_id" integer NOT NULL references "customer"("id") on DELETE CASCADE, |
||||
"created_at" integer NOT NULL, |
||||
"total" decimal(10,0) NOT NULL, |
||||
CONSTRAINT "order_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
CREATE SEQUENCE "order_SEQ"; |
||||
|
||||
CREATE TABLE "order_with_null_fk" ( |
||||
"id" integer not null, |
||||
"customer_id" integer, |
||||
"created_at" integer NOT NULL, |
||||
"total" decimal(10,0) NOT NULL, |
||||
CONSTRAINT "order_with_null_fk_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
CREATE SEQUENCE "order_with_null_fk_SEQ"; |
||||
|
||||
CREATE TABLE "order_item" ( |
||||
"order_id" integer NOT NULL references "order"("id") on DELETE CASCADE, |
||||
"item_id" integer NOT NULL references "item"("id") on DELETE CASCADE, |
||||
"quantity" integer NOT NULL, |
||||
"subtotal" decimal(10,0) NOT NULL, |
||||
CONSTRAINT "order_item_PK" PRIMARY KEY ("order_id", "item_id") ENABLE |
||||
); |
||||
|
||||
CREATE TABLE "order_item_with_null_fk" ( |
||||
"order_id" integer, |
||||
"item_id" integer, |
||||
"quantity" integer NOT NULL, |
||||
"subtotal" decimal(10,0) NOT NULL |
||||
); |
||||
|
||||
CREATE TABLE "composite_fk" ( |
||||
"id" integer NOT NULL, |
||||
"order_id" integer NOT NULL, |
||||
"item_id" integer NOT NULL, |
||||
CONSTRAINT "composite_fk_PK" PRIMARY KEY ("id") ENABLE, |
||||
CONSTRAINT FK_composite_fk_order_item FOREIGN KEY ("order_id", "item_id") |
||||
REFERENCES "order_item" ("order_id", "item_id") ON DELETE CASCADE |
||||
); |
||||
|
||||
CREATE TABLE "null_values" ( |
||||
"id" INT NOT NULL, |
||||
"var1" INT NULL, |
||||
"var2" INT NULL, |
||||
"var3" INT DEFAULT NULL, |
||||
"stringcol" varchar2(32) DEFAULT NULL, |
||||
CONSTRAINT "null_values_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
CREATE SEQUENCE "null_values_SEQ"; |
||||
|
||||
CREATE TABLE "negative_default_values" ( |
||||
"tinyint_col" number(3) default -123, |
||||
"smallint_col" smallint default -123, |
||||
"int_col" integer default -123, |
||||
"bigint_col" integer default -123, |
||||
"float_col" double precision default -12345.6789, |
||||
"numeric_col" decimal(5,2) default -33.22 |
||||
); |
||||
|
||||
CREATE TABLE "type" ( |
||||
"int_col" integer NOT NULL, |
||||
"int_col2" integer DEFAULT 1, |
||||
"tinyint_col" number(3) DEFAULT 1, |
||||
"smallint_col" smallint DEFAULT 1, |
||||
"char_col" char(100) NOT NULL, |
||||
"char_col2" varchar2(100) DEFAULT 'something', |
||||
"char_col3" varchar2(4000), |
||||
"float_col" double precision NOT NULL, |
||||
"float_col2" double precision DEFAULT 1.23, |
||||
"blob_col" blob, |
||||
"numeric_col" decimal(5,2) DEFAULT 33.22, |
||||
"time" timestamp DEFAULT to_timestamp('2002-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss') NOT NULL, |
||||
"bool_col" char NOT NULL check ("bool_col" in (0,1)), |
||||
"bool_col2" char DEFAULT 1 check("bool_col2" in (0,1)), |
||||
"ts_default" TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, |
||||
"bit_col" char(3) DEFAULT 130 NOT NULL |
||||
); |
||||
|
||||
CREATE TABLE "bool_values" ( |
||||
"id" integer not null, |
||||
"bool_col" char check ("bool_col" in (0,1)), |
||||
"default_true" char default 1 not null check ("default_true" in (0,1)), |
||||
"default_false" char default 0 not null check ("default_false" in (0,1)), |
||||
CONSTRAINT "bool_values_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
CREATE SEQUENCE "bool_values_SEQ"; |
||||
|
||||
|
||||
CREATE TABLE "animal" ( |
||||
"id" integer, |
||||
"type" varchar2(255) not null, |
||||
CONSTRAINT "animal_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
CREATE SEQUENCE "animal_SEQ"; |
||||
|
||||
CREATE TABLE "default_pk" ( |
||||
"id" integer default 5 not null, |
||||
"type" varchar2(255) not null, |
||||
CONSTRAINT "default_pk_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
|
||||
CREATE TABLE "document" ( |
||||
"id" integer, |
||||
"title" varchar2(255) not null, |
||||
"content" varchar(4000), |
||||
"version" integer default 0 not null, |
||||
CONSTRAINT "document_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
CREATE SEQUENCE "document_SEQ"; |
||||
|
||||
CREATE TABLE "department" ( |
||||
"id" INTEGER NOT NULL, |
||||
"title" varchar2(255) not null, |
||||
CONSTRAINT "department_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
CREATE SEQUENCE "department_SEQ"; |
||||
|
||||
CREATE TABLE "employee" ( |
||||
"id" INTEGER NOT NULL, |
||||
"department_id" INTEGER NOT NULL, |
||||
"first_name" varchar2(255) not null, |
||||
"last_name" varchar2(255) not null, |
||||
CONSTRAINT "employee_PK" PRIMARY KEY ("id", "department_id") ENABLE |
||||
); |
||||
CREATE SEQUENCE "employee_SEQ"; |
||||
|
||||
CREATE TABLE "dossier" ( |
||||
"id" INTEGER NOT NULL, |
||||
"department_id" INTEGER NOT NULL, |
||||
"employee_id" INTEGER NOT NULL, |
||||
"summary" varchar2(255) not null, |
||||
CONSTRAINT "dossier_PK" PRIMARY KEY ("id", "department_id") ENABLE |
||||
); |
||||
|
||||
CREATE VIEW "animal_view" AS SELECT * FROM "animal"; |
||||
|
||||
CREATE TABLE "bit_values" ( |
||||
"id" integer not null, |
||||
"val" char(1) NOT NULL, |
||||
CONSTRAINT "bit_values_PK" PRIMARY KEY ("id") ENABLE, |
||||
CONSTRAINT "bit_values_val" CHECK ("val" IN ('1','0')) |
||||
); |
||||
|
||||
CREATE TABLE "T_constraints_1" |
||||
( |
||||
"C_id" INT NOT NULL PRIMARY KEY, |
||||
"C_not_null" INT NOT NULL, |
||||
"C_check" VARCHAR(255) NULL CHECK ("C_check" <> ''), |
||||
"C_unique" INT NOT NULL, |
||||
"C_default" INT DEFAULT 0 NOT NULL, |
||||
CONSTRAINT "CN_unique" UNIQUE ("C_unique") |
||||
); |
||||
|
||||
CREATE TABLE "T_constraints_2" |
||||
( |
||||
"C_id_1" INT NOT NULL, |
||||
"C_id_2" INT NOT NULL, |
||||
"C_index_1" INT NULL, |
||||
"C_index_2_1" INT NULL, |
||||
"C_index_2_2" INT NULL, |
||||
CONSTRAINT "CN_constraints_2_multi" UNIQUE ("C_index_2_1", "C_index_2_2"), |
||||
CONSTRAINT "CN_pk" PRIMARY KEY ("C_id_1", "C_id_2") |
||||
); |
||||
|
||||
CREATE INDEX "CN_constraints_2_single" ON "T_constraints_2" ("C_index_1"); |
||||
|
||||
CREATE TABLE "T_constraints_3" |
||||
( |
||||
"C_id" INT NOT NULL, |
||||
"C_fk_id_1" INT NOT NULL, |
||||
"C_fk_id_2" INT NOT NULL, |
||||
CONSTRAINT "CN_constraints_3" FOREIGN KEY ("C_fk_id_1", "C_fk_id_2") REFERENCES "T_constraints_2" ("C_id_1", "C_id_2") ON DELETE CASCADE |
||||
); |
||||
|
||||
CREATE TABLE "T_constraints_4" |
||||
( |
||||
"C_id" INT NOT NULL PRIMARY KEY, |
||||
"C_col_1" INT NULL, |
||||
"C_col_2" INT NOT NULL, |
||||
CONSTRAINT "CN_constraints_4" UNIQUE ("C_col_1", "C_col_2") |
||||
); |
||||
|
||||
CREATE TABLE "T_upsert" |
||||
( |
||||
"id" INT NOT NULL PRIMARY KEY, |
||||
"ts" INT NULL, |
||||
"email" VARCHAR(128) NOT NULL UNIQUE, |
||||
"recovery_email" VARCHAR(128) NULL, |
||||
"address" CLOB NULL, |
||||
"status" NUMBER(5,0) DEFAULT 0 NOT NULL, |
||||
"orders" INT DEFAULT 0 NOT NULL, |
||||
"profile_id" INT NULL, |
||||
CONSTRAINT "CN_T_upsert_multi" UNIQUE ("email", "recovery_email") |
||||
); |
||||
CREATE SEQUENCE "T_upsert_SEQ"; |
||||
|
||||
/** |
||||
* (Postgres-)Database Schema for validator tests |
||||
*/ |
||||
|
||||
CREATE TABLE "validator_main" ( |
||||
"id" integer not null, |
||||
"field1" varchar2(255), |
||||
CONSTRAINT "validator_main_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
|
||||
CREATE TABLE "validator_ref" ( |
||||
"id" integer not null, |
||||
"a_field" varchar2(255), |
||||
"ref" integer, |
||||
CONSTRAINT "validator_ref_PK" PRIMARY KEY ("id") ENABLE |
||||
); |
||||
|
||||
/* TRIGGERS */ |
||||
|
||||
CREATE TRIGGER "profile_TRG" BEFORE INSERT ON "profile" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "profile_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
||||
END COLUMN_SEQUENCES; |
||||
END; |
||||
/ |
||||
CREATE TRIGGER "customer_TRG" BEFORE INSERT ON "customer" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "customer_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
||||
END COLUMN_SEQUENCES; |
||||
END; |
||||
/ |
||||
CREATE TRIGGER "category_TRG" BEFORE INSERT ON "category" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "category_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
||||
END COLUMN_SEQUENCES; |
||||
END; |
||||
/ |
||||
CREATE TRIGGER "item_TRG" BEFORE INSERT ON "item" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "item_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
||||
END COLUMN_SEQUENCES; |
||||
END; |
||||
/ |
||||
CREATE TRIGGER "order_TRG" BEFORE INSERT ON "order" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "order_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
||||
END COLUMN_SEQUENCES; |
||||
END; |
||||
/ |
||||
CREATE TRIGGER "order_with_null_fk_TRG" BEFORE INSERT ON "order_with_null_fk" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "order_with_null_fk_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
||||
END COLUMN_SEQUENCES; |
||||
END; |
||||
/ |
||||
CREATE TRIGGER "null_values_TRG" BEFORE INSERT ON "null_values" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "null_values_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
||||
END COLUMN_SEQUENCES; |
||||
END; |
||||
/ |
||||
CREATE TRIGGER "bool_values_TRG" BEFORE INSERT ON "bool_values" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "bool_values_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
||||
END COLUMN_SEQUENCES; |
||||
END; |
||||
/ |
||||
CREATE TRIGGER "animal_TRG" BEFORE INSERT ON "animal" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "animal_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
||||
END COLUMN_SEQUENCES; |
||||
END; |
||||
/ |
||||
CREATE TRIGGER "document_TRG" BEFORE INSERT ON "document" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "document_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
||||
END COLUMN_SEQUENCES; |
||||
END; |
||||
/ |
||||
CREATE TRIGGER "T_upsert_TRG" BEFORE INSERT ON "T_upsert" FOR EACH ROW BEGIN <<COLUMN_SEQUENCES>> BEGIN |
||||
IF INSERTING AND :NEW."id" IS NULL THEN SELECT "T_upsert_SEQ".NEXTVAL INTO :NEW."id" FROM SYS.DUAL; END IF; |
||||
END COLUMN_SEQUENCES; |
||||
END; |
||||
/ |
||||
|
||||
/* TRIGGERS */ |
||||
|
||||
INSERT INTO "animal" ("type") VALUES ('yiiunit\data\ar\Cat'); |
||||
INSERT INTO "animal" ("type") VALUES ('yiiunit\data\ar\Dog'); |
||||
|
||||
|
||||
INSERT INTO "profile" ("description") VALUES ('profile customer 1'); |
||||
INSERT INTO "profile" ("description") VALUES ('profile customer 3'); |
||||
|
||||
INSERT INTO "customer" ("email", "name", "address", "status", "bool_status", "profile_id") VALUES ('user1@example.com', 'user1', 'address1', 1, 1, 1); |
||||
INSERT INTO "customer" ("email", "name", "address", "status", "bool_status") VALUES ('user2@example.com', 'user2', 'address2', 1, 1); |
||||
INSERT INTO "customer" ("email", "name", "address", "status", "bool_status", "profile_id") VALUES ('user3@example.com', 'user3', 'address3', 2, 0, 2); |
||||
|
||||
INSERT INTO "category" ("name") VALUES ('Books'); |
||||
INSERT INTO "category" ("name") VALUES ('Movies'); |
||||
|
||||
INSERT INTO "item" ("name", "category_id") VALUES ('Agile Web Application Development with Yii1.1 and PHP5', 1); |
||||
INSERT INTO "item" ("name", "category_id") VALUES ('Yii 1.1 Application Development Cookbook', 1); |
||||
INSERT INTO "item" ("name", "category_id") VALUES ('Ice Age', 2); |
||||
INSERT INTO "item" ("name", "category_id") VALUES ('Toy Story', 2); |
||||
INSERT INTO "item" ("name", "category_id") VALUES ('Cars', 2); |
||||
|
||||
INSERT INTO "order" ("customer_id", "created_at", "total") VALUES (1, 1325282384, 110.0); |
||||
INSERT INTO "order" ("customer_id", "created_at", "total") VALUES (2, 1325334482, 33.0); |
||||
INSERT INTO "order" ("customer_id", "created_at", "total") VALUES (2, 1325502201, 40.0); |
||||
|
||||
INSERT INTO "order_with_null_fk" ("customer_id", "created_at", "total") VALUES (1, 1325282384, 110.0); |
||||
INSERT INTO "order_with_null_fk" ("customer_id", "created_at", "total") VALUES (2, 1325334482, 33.0); |
||||
INSERT INTO "order_with_null_fk" ("customer_id", "created_at", "total") VALUES (2, 1325502201, 40.0); |
||||
|
||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (1, 1, 1, 30.0); |
||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (1, 2, 2, 40.0); |
||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 4, 1, 10.0); |
||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 5, 1, 15.0); |
||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 3, 1, 8.0); |
||||
INSERT INTO "order_item" ("order_id", "item_id", "quantity", "subtotal") VALUES (3, 2, 1, 40.0); |
||||
|
||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (1, 1, 1, 30.0); |
||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (1, 2, 2, 40.0); |
||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 4, 1, 10.0); |
||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 5, 1, 15.0); |
||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (2, 3, 1, 8.0); |
||||
INSERT INTO "order_item_with_null_fk" ("order_id", "item_id", "quantity", "subtotal") VALUES (3, 2, 1, 40.0); |
||||
|
||||
INSERT INTO "document" ("title", "content", "version") VALUES ('Yii 2.0 guide', 'This is Yii 2.0 guide', 0); |
||||
|
||||
INSERT INTO "department" ("id", "title") VALUES (1, 'IT'); |
||||
INSERT INTO "department" ("id", "title") VALUES (2, 'accounting'); |
||||
|
||||
INSERT INTO "employee" ("id", "department_id", "first_name", "last_name") VALUES (1, 1, 'John', 'Doe'); |
||||
INSERT INTO "employee" ("id", "department_id", "first_name", "last_name") VALUES (1, 2, 'Ann', 'Smith'); |
||||
INSERT INTO "employee" ("id", "department_id", "first_name", "last_name") VALUES (2, 2, 'Will', 'Smith'); |
||||
|
||||
INSERT INTO "dossier" ("id", "department_id", "employee_id", "summary") VALUES (1, 1, 1, 'Excellent employee.'); |
||||
INSERT INTO "dossier" ("id", "department_id", "employee_id", "summary") VALUES (2, 2, 1, 'Brilliant employee.'); |
||||
INSERT INTO "dossier" ("id", "department_id", "employee_id", "summary") VALUES (3, 2, 2, 'Good employee.'); |
||||
|
||||
INSERT INTO "validator_main" ("id", "field1") VALUES (1, 'just a string1'); |
||||
INSERT INTO "validator_main" ("id", "field1") VALUES (2, 'just a string2'); |
||||
INSERT INTO "validator_main" ("id", "field1") VALUES (3, 'just a string3'); |
||||
INSERT INTO "validator_main" ("id", "field1") VALUES (4, 'just a string4'); |
||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (1, 'ref_to_2', 2); |
||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (2, 'ref_to_2', 2); |
||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (3, 'ref_to_3', 3); |
||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (4, 'ref_to_4', 4); |
||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (5, 'ref_to_4', 4); |
||||
INSERT INTO "validator_ref" ("id", "a_field", "ref") VALUES (6, 'ref_to_5', 5); |
||||
|
||||
INSERT INTO "bit_values" ("id", "val") |
||||
SELECT 1, '0' FROM SYS.DUAL |
||||
UNION ALL SELECT 2, '1' FROM SYS.DUAL; |
@ -1,3 +0,0 @@
|
||||
<form id="w0"> |
||||
<input id="name" type="text" name="name" value=""> |
||||
</form> |
@ -1,170 +0,0 @@
|
||||
<!-- Filters for testing of multiple grid views --> |
||||
|
||||
<div id="w-common-filters"> |
||||
<input name="PostSearch[id]" type="text"> |
||||
<input name="PostSearch[name]" type="text"> |
||||
</div> |
||||
|
||||
<!-- The main setup --> |
||||
|
||||
<div id="w0" class="grid-view"> |
||||
<table> |
||||
<thead> |
||||
<tr> |
||||
<th><input id="w0-check-all" name="selection_all" value="1" type="checkbox"></th> |
||||
<th>Name</th> |
||||
<th>Category</th> |
||||
<th>Tags</th> |
||||
</tr> |
||||
<tr id="w0-filters"> |
||||
<td> </td> |
||||
<td><input id="w0-name" name="PostSearch[name]" type="text"></td> |
||||
<td> |
||||
<select id="w0-category" name="PostSearch[category_id]"> |
||||
<option value="" selected>None</option> |
||||
<option value="1">Programming</option> |
||||
<option value="2">Traveling</option> |
||||
</select> |
||||
</td> |
||||
<td> |
||||
<select id="w0-tags" name="PostSearch[tags][]" multiple> |
||||
<option value="1">html</option> |
||||
<option value="2">css</option> |
||||
<option value="3">js</option> |
||||
<option value="4">php</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
<tr data-key="1"> |
||||
<td><input class="w0-check-row" name="selection[]" value="1" type="checkbox"></td> |
||||
<td>Name 1</td> |
||||
<td>Programming</td> |
||||
<td>html, css</td> |
||||
</tr> |
||||
<tr data-key="2"> |
||||
<td><input class="w0-check-row" name="selection[]" value="2" type="checkbox"></td> |
||||
<td>Name 2</td> |
||||
<td>Programming</td> |
||||
<td>js</td> |
||||
</tr> |
||||
<tr data-key="3"> |
||||
<td><input class="w0-check-row" name="selection[]" value="3" type="checkbox"></td> |
||||
<td>Name 3</td> |
||||
<td>Programming</td> |
||||
<td>php</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
|
||||
<!-- The basic setup, used for testing of multiple grid views --> |
||||
|
||||
<div id="w1" class="grid-view"> |
||||
<table> |
||||
<thead> |
||||
<tr> |
||||
<th><input name="selection_all" value="1" type="checkbox"></th> |
||||
<th>ID</th> |
||||
<th>Name</th> |
||||
</tr> |
||||
<tr id="w1-filters"> |
||||
<td> </td> |
||||
<td><input name="PostSearch[id]" type="text"></td> |
||||
<td><input name="PostSearch[name]" type="text"></td> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
<tr data-key="1"> |
||||
<td><input name="selection[]" value="1" type="checkbox"></td> |
||||
<td>1</td> |
||||
<td>Name 1</td> |
||||
</tr> |
||||
<tr data-key="2"> |
||||
<td><input name="selection[]" value="2" type="checkbox"></td> |
||||
<td>2</td> |
||||
<td>Name 2</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
|
||||
<!-- https://github.com/yiisoft/yii2/pull/10284 --> |
||||
|
||||
<div id="w2"> |
||||
<table> |
||||
<thead> |
||||
<tr> |
||||
<th>Name</th> |
||||
<th>Tags</th> |
||||
</tr> |
||||
<tr id="w2-filters"> |
||||
<td><input name="PostSearch[name]" type="text"></td> |
||||
<td> |
||||
<input type="hidden" name="PostSearch[tags]" value="-1"> |
||||
<select id="w2-tags" name="PostSearch[tags][]" multiple> |
||||
<option value="1">html</option> |
||||
<option value="2">css</option> |
||||
<option value="3">js</option> |
||||
<option value="4">php</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
<tr data-key="1"> |
||||
<td>Name 1</td> |
||||
<td>html, css</td> |
||||
</tr> |
||||
<tr data-key="2"> |
||||
<td>Name 2</td> |
||||
<td>js</td> |
||||
</tr> |
||||
<tr data-key="3"> |
||||
<td>Name 3</td> |
||||
<td>php</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
||||
|
||||
<!-- Setup for testing that event handlers are correctly removed with new selectors --> |
||||
|
||||
<div id="w3"> |
||||
<table> |
||||
<thead> |
||||
<tr> |
||||
<th> |
||||
<input name="selection_all" value="1" type="checkbox"> |
||||
<input name="selection_all2" value="1" type="checkbox"> |
||||
</th> |
||||
<th>ID</th> |
||||
<th>Name</th> |
||||
</tr> |
||||
<tr id="w3-filters"> |
||||
<td> </td> |
||||
<td><input name="PostSearch[id]" type="text"></td> |
||||
<td><input name="PostSearch[name]" type="text"></td> |
||||
</tr> |
||||
</thead> |
||||
<tbody> |
||||
<tr data-key="1"> |
||||
<td> |
||||
<input class="w3-check-row" name="selection[]" value="1" type="checkbox"> |
||||
<input name="selection2[]" value="1" type="checkbox"> |
||||
</td> |
||||
<td>1</td> |
||||
<td>Name 1</td> |
||||
</tr> |
||||
<tr data-key="2"> |
||||
<td> |
||||
<input class="w3-check-row" name="selection[]" value="2" type="checkbox"> |
||||
<input name="selection2[]" value="2" type="checkbox"> |
||||
</td> |
||||
<td>2</td> |
||||
<td>Name 2</td> |
||||
</tr> |
||||
</tbody> |
||||
</table> |
||||
</div> |
@ -1,194 +0,0 @@
|
||||
<!doctype html> |
||||
<html> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<meta name="csrf-param" content="_csrf"> |
||||
<meta name="csrf-token" content="foobar"> |
||||
</head> |
||||
<body id="body"> |
||||
<div class="csrf"> |
||||
<form id="form1"> |
||||
<input name="_csrf" value="" type="hidden"> |
||||
</form> |
||||
|
||||
<form id="form2"> |
||||
<input name="_csrf" value="" type="hidden"> |
||||
</form> |
||||
</div> |
||||
|
||||
<div class="handle-action"> |
||||
<!-- The rest of pjax related attributes are set using JS to prevent copy pasting and for better readability --> |
||||
|
||||
<div class="no-method"> |
||||
<div class="invalid"> |
||||
<div class="no-form"> |
||||
<a class="link-no-href"></a> |
||||
<a class="link-empty-href" href=""></a> |
||||
<a class="link-anchor-href" href="#"></a> |
||||
|
||||
<a class="link-no-href-pjax" data-pjax></a> |
||||
<a class="link-empty-href-pjax" href="" data-pjax></a> |
||||
<a class="link-anchor-href-pjax" href="#" data-pjax></a> |
||||
|
||||
<input class="not-submit-no-form" type="text"> |
||||
<input class="submit-no-form" type="submit"> |
||||
<button class="submit-form-not-exist" data-form="not-existing-form"></button> |
||||
|
||||
<input class="not-submit-no-form-pjax" type="text" data-pjax> |
||||
<input class="submit-no-form-pjax" type="submit" data-pjax> |
||||
<button class="submit-form-not-exist-pjax" data-form="not-existing-form" data-pjax></button> |
||||
</div> |
||||
|
||||
<div class="form"> |
||||
<form id="not-submit-separate-form"> |
||||
<input name="query" value="a"> |
||||
</form> |
||||
|
||||
<button class="not-submit-outside-form" type="button" data-form="not-submit-separate-form"></button> |
||||
<form id="not-submit-parent-form"> |
||||
<input class="not-submit-inside-form" type="reset"> |
||||
</form> |
||||
|
||||
<button class="not-submit-outside-form-pjax" |
||||
type="button" |
||||
data-form="not-submit-separate-form" |
||||
data-pjax></button> |
||||
<form id="not-submit-parent-form-pjax"> |
||||
<input class="not-submit-inside-form-pjax" type="reset" data-pjax> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="valid"> |
||||
<a class="link" href="/tests/index"></a> |
||||
<a class="link-pjax-0" href="/tests/index" data-pjax="0"></a> |
||||
|
||||
<a class="link-pjax" href="/tests/index" data-pjax></a> |
||||
<a class="link-pjax-1" href="/tests/index" data-pjax="1"></a> |
||||
<a class="link-pjax-true" href="/tests/index" data-pjax="true"></a> |
||||
|
||||
<div id="pjax-separate-container"></div> |
||||
<a class="link-pjax-outside-container" |
||||
href="/tests/index" |
||||
data-pjax |
||||
data-pjax-container="#pjax-separate-container"></a> |
||||
|
||||
<div id="pjax-container-1" data-pjax-container> |
||||
<div id="pjax-container-2" data-pjax-container> |
||||
<a class="link-pjax-inside-container" href="/tests/index" data-pjax></a> |
||||
</div> |
||||
</div> |
||||
|
||||
<form id="submit-separate-form"> |
||||
<input name="query" value="a"> |
||||
</form> |
||||
|
||||
<input class="submit-outside-form" type="submit" data-form="submit-separate-form"> |
||||
<form id="submit-parent-form"> |
||||
<button class="submit-inside-form"></button> |
||||
</form> |
||||
|
||||
<input class="submit-outside-form-pjax" type="submit" data-form="submit-separate-form" data-pjax> |
||||
|
||||
<form id="submit-parent-form-pjax"> |
||||
<button class="submit-inside-form-pjax" data-pjax></button> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="method"> |
||||
<div class="no-form"> |
||||
<a class="bad-href" href="#" data-method="get"></a> |
||||
<a class="bad-params" href="/tests/index" data-method="get" data-params="{'foo':'1','bar':'2'}"></a> |
||||
|
||||
<a class="get-params-target" |
||||
href="/tests/index" |
||||
target="_blank" |
||||
data-method="get" |
||||
data-params='{"foo":"1","bar":"2"}'></a> |
||||
<a class="head" href="/tests/index" data-method="head" data-params='{"foo":"1","bar":"2"}'></a> |
||||
<a class="post" href="/tests/index" data-method="post" data-params='{"foo":"1","bar":"2"}'></a> |
||||
<a class="post-upper-case" href="/tests/index" data-method="POST" data-params='{"foo":"1","bar":"2"}'></a> |
||||
<a class="put" href="/tests/index" data-method="put" data-params='{"foo":"1","bar":"2"}'></a> |
||||
|
||||
<a class="get-params-pjax" |
||||
href="/tests/index" |
||||
data-method="get" |
||||
data-params='{"foo":"1","bar":"2"}' |
||||
data-pjax></a> |
||||
</div> |
||||
|
||||
<div class="form"> |
||||
<a class="new-action-new-method" |
||||
href="/search" |
||||
data-method="post" |
||||
data-form="method-form" |
||||
data-params='{"foo":"1","bar":"2"}'></a> |
||||
<a class="same-action-same-method" |
||||
href="/tests/search" |
||||
data-method="get" |
||||
data-form="method-form" |
||||
data-params='{"foo":"1","bar":"2"}'></a> |
||||
<a class="bad-action-new-method" |
||||
href="#" |
||||
data-method="post" |
||||
data-form="method-form" |
||||
data-params='{"foo":"1","bar":"2"}'></a> |
||||
|
||||
<form id="method-form" method="get" action="/tests/search"> |
||||
<input name="query" value="a"> |
||||
</form> |
||||
|
||||
<!-- https://github.com/yiisoft/yii2/pull/8014 --> |
||||
|
||||
<a class="hidden-method-action" |
||||
href="/tests/search" |
||||
data-method="get" |
||||
data-form="form-hidden-method-action" |
||||
data-params='{"foo":"1","bar":"2"}'></a> |
||||
|
||||
<form id="form-hidden-method-action" method="get" action="/tests/search"> |
||||
<input name="query" value="a"> |
||||
<input name="method" value="b" type="hidden"> |
||||
<input name="action" value="c" type="hidden"> |
||||
</form> |
||||
|
||||
<a class="new-action-new-method-pjax" |
||||
href="/search" |
||||
data-method="post" |
||||
data-form="method-form" |
||||
data-params='{"foo":"1","bar":"2"}' |
||||
data-pjax></a> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
|
||||
<div class="data-methods"> |
||||
<a id="data-methods-no-data" class="data-methods-element" href="/tests/index"></a> |
||||
<a id="data-methods-click-confirm" |
||||
class="data-methods-element" |
||||
href="/tests/index" |
||||
data-confirm="Are you sure?"></a> |
||||
<form> |
||||
<select id="data-methods-change" class="data-methods-element" data-method="get"> |
||||
<option value="1">html</option> |
||||
<option value="2">css</option> |
||||
</select> |
||||
</form> |
||||
</div> |
||||
|
||||
<div class="asset-filters"> |
||||
<div class="scripts"> |
||||
<script src="/js/existing1.js"></script> |
||||
<!-- To test correct work with absolute urls --> |
||||
<script src="http://foo.bar/js/existing2.js"></script> |
||||
</div> |
||||
|
||||
<div class="stylesheets"> |
||||
<link id="stylesheet1" href="/css/stylesheet1.css" rel="stylesheet"> |
||||
<!-- To test correct work with absolute urls --> |
||||
<link id="stylesheet2" href="http://foo.bar/css/stylesheet2.css" rel="stylesheet"> |
||||
</div> |
||||
</div> |
||||
</body> |
||||
</html> |
@ -1,162 +0,0 @@
|
||||
var assert = require('chai').assert; |
||||
var sinon; |
||||
var jsdom = require('mocha-jsdom'); |
||||
|
||||
var fs = require('fs'); |
||||
var vm = require('vm'); |
||||
|
||||
describe('yii.activeForm', function () { |
||||
var yiiActiveFormPath = 'framework/jquery/assets/yii.activeForm.js'; |
||||
var yiiPath = 'framework/jquery/assets/yii.js'; |
||||
var jQueryPath = 'vendor/bower-asset/jquery/dist/jquery.js'; |
||||
var $; |
||||
var $activeForm; |
||||
|
||||
function registerYii() { |
||||
var code = fs.readFileSync(yiiPath); |
||||
var script = new vm.Script(code); |
||||
var sandbox = {window: window, jQuery: $}; |
||||
var context = new vm.createContext(sandbox); |
||||
script.runInContext(context); |
||||
return sandbox.window.yii; |
||||
} |
||||
|
||||
function registerTestableCode() { |
||||
var yii = registerYii(); |
||||
var code = fs.readFileSync(yiiActiveFormPath); |
||||
var script = new vm.Script(code); |
||||
var context = new vm.createContext({window: window, document: window.document, yii: yii}); |
||||
script.runInContext(context); |
||||
} |
||||
|
||||
var activeFormHtml = fs.readFileSync('tests/js/data/yii.activeForm.html', 'utf-8'); |
||||
var html = '<!doctype html><html><head><meta charset="utf-8"></head><body>' + activeFormHtml + '</body></html>'; |
||||
|
||||
jsdom({ |
||||
html: html, |
||||
src: fs.readFileSync(jQueryPath, 'utf-8') |
||||
}); |
||||
|
||||
before(function () { |
||||
$ = window.$; |
||||
registerTestableCode(); |
||||
sinon = require('sinon'); |
||||
}); |
||||
|
||||
describe('validate method', function () { |
||||
var windowSetTimeoutStub; |
||||
var afterValidateSpy; |
||||
|
||||
beforeEach(function () { |
||||
windowSetTimeoutStub = sinon.stub(window, 'setTimeout', function (callback) { |
||||
callback(); |
||||
}); |
||||
afterValidateSpy = sinon.spy(); |
||||
}); |
||||
|
||||
afterEach(function () { |
||||
windowSetTimeoutStub.restore(); |
||||
afterValidateSpy.reset(); |
||||
}); |
||||
|
||||
describe('with forceValidate parameter set to true', function () { |
||||
it('should trigger manual form validation', function () { |
||||
var inputId = 'name'; |
||||
|
||||
$activeForm = $('#w0'); |
||||
$activeForm.yiiActiveForm([ |
||||
{ |
||||
id: inputId, |
||||
input: '#' + inputId |
||||
} |
||||
]).on('afterValidate', afterValidateSpy); |
||||
|
||||
$activeForm.yiiActiveForm('validate', true); |
||||
// https://github.com/yiisoft/yii2/issues/14510
|
||||
assert.isTrue($activeForm.data('yiiActiveForm').validated); |
||||
// https://github.com/yiisoft/yii2/issues/14186
|
||||
assert.isTrue(afterValidateSpy.calledOnce); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('resetForm method', function () { |
||||
var windowSetTimeoutStub; |
||||
|
||||
beforeEach(function () { |
||||
windowSetTimeoutStub = sinon.stub(window, 'setTimeout', function (callback) { |
||||
callback(); |
||||
}); |
||||
}); |
||||
|
||||
afterEach(function () { |
||||
windowSetTimeoutStub.restore(); |
||||
}); |
||||
|
||||
it('should remove classes from error element', function () { |
||||
var inputId = 'name'; |
||||
var $input = $('#' + inputId); |
||||
var options = { |
||||
validatingCssClass: 'validating', |
||||
errorCssClass: 'error', |
||||
successCssClass: 'success', |
||||
validationStateOn: 'input' |
||||
}; |
||||
|
||||
$activeForm = $('#w0'); |
||||
$activeForm.yiiActiveForm('destroy'); |
||||
$activeForm.yiiActiveForm([ |
||||
{ |
||||
id: inputId, |
||||
input: '#' + inputId |
||||
} |
||||
], options); |
||||
|
||||
$input.addClass(options.validatingCssClass); |
||||
$input.addClass(options.errorCssClass); |
||||
$input.addClass(options.successCssClass); |
||||
$input.addClass('test'); |
||||
$activeForm.yiiActiveForm('resetForm'); |
||||
assert.isFalse($input.hasClass(options.validatingCssClass)); |
||||
assert.isFalse($input.hasClass(options.errorCssClass)); |
||||
assert.isFalse($input.hasClass(options.successCssClass)); |
||||
assert.isTrue($input.hasClass('test')); |
||||
}); |
||||
}); |
||||
|
||||
describe('events', function () { |
||||
describe('afterValidateAttribute', function () { |
||||
var afterValidateAttributeSpy; |
||||
var eventData; |
||||
|
||||
before(function () { |
||||
afterValidateAttributeSpy = sinon.spy(function (event, data) { |
||||
eventData = data; |
||||
}); |
||||
}); |
||||
|
||||
after(function () { |
||||
afterValidateAttributeSpy.reset(); |
||||
}); |
||||
|
||||
// https://github.com/yiisoft/yii2/issues/14318
|
||||
|
||||
it('should allow to get updated attribute value', function () { |
||||
var inputId = 'name'; |
||||
var $input = $('#' + inputId); |
||||
|
||||
$activeForm = $('#w0'); |
||||
$activeForm.yiiActiveForm([ |
||||
{ |
||||
id: inputId, |
||||
input: '#' + inputId |
||||
} |
||||
]).on('afterValidateAttribute', afterValidateAttributeSpy); |
||||
|
||||
$input.val('New value'); |
||||
$activeForm.yiiActiveForm('updateAttribute', inputId); |
||||
assert.equal('New value', eventData.value); |
||||
}); |
||||
}); |
||||
}); |
||||
}); |
@ -1,151 +0,0 @@
|
||||
var assert = require('chai').assert; |
||||
var sinon; |
||||
var withData = require('leche').withData; |
||||
var jsdom = require('mocha-jsdom'); |
||||
|
||||
var fs = require('fs'); |
||||
var vm = require('vm'); |
||||
|
||||
describe('yii.captcha', function () { |
||||
var yiiCaptchaPath = 'framework/captcha/assets/yii.captcha.js'; |
||||
var jQueryPath = 'vendor/bower-asset/jquery/dist/jquery.js'; |
||||
var $; |
||||
var $captcha; |
||||
var settings = { |
||||
refreshUrl: '/site/captcha?refresh=1', |
||||
hashKey: 'yiiCaptcha/site/captcha' |
||||
}; |
||||
|
||||
function registerTestableCode() { |
||||
var code = fs.readFileSync(yiiCaptchaPath); |
||||
var script = new vm.Script(code); |
||||
var context = new vm.createContext({window: window}); |
||||
|
||||
script.runInContext(context); |
||||
} |
||||
|
||||
var imgHtml = '<img id="captcha" class="captcha" src="/site/captcha/">' + |
||||
'<img id="captcha-2" class="captcha" src="/site/captcha/">'; |
||||
var html = '<!doctype html><html><head><meta charset="utf-8"></head><body>' + imgHtml + '</body></html>'; |
||||
|
||||
jsdom({ |
||||
html: html, |
||||
src: fs.readFileSync(jQueryPath, 'utf-8') |
||||
}); |
||||
|
||||
before(function () { |
||||
$ = window.$; |
||||
registerTestableCode(); |
||||
sinon = require('sinon'); |
||||
}); |
||||
|
||||
afterEach(function () { |
||||
if ($captcha.length) { |
||||
$captcha.yiiCaptcha('destroy'); |
||||
} |
||||
}); |
||||
|
||||
describe('init', function () { |
||||
var customSettings = { |
||||
refreshUrl: '/posts/captcha?refresh=1', |
||||
hashKey: 'yiiCaptcha/posts/captcha' |
||||
}; |
||||
|
||||
withData({ |
||||
'no method specified': [function () { |
||||
$captcha = $('.captcha').yiiCaptcha(settings); |
||||
}, settings], |
||||
'no method specified, custom options': [function () { |
||||
$captcha = $('.captcha').yiiCaptcha(customSettings); |
||||
}, customSettings], |
||||
'manual method call': [function () { |
||||
$captcha = $('.captcha').yiiCaptcha('init', settings); |
||||
}, settings] |
||||
}, function (initFunction, expectedSettings) { |
||||
it('should save settings for all elements', function () { |
||||
initFunction(); |
||||
assert.deepEqual($('#captcha').data('yiiCaptcha'), {settings: expectedSettings}); |
||||
assert.deepEqual($('#captcha-2').data('yiiCaptcha'), {settings: expectedSettings}); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('refresh', function () { |
||||
var server; |
||||
var response = {hash1: 747, hash2: 748, url: '/site/captcha?v=584696959e038'}; |
||||
|
||||
beforeEach(function () { |
||||
server = sinon.fakeServer.create(); |
||||
window.XMLHttpRequest = global.XMLHttpRequest; |
||||
}); |
||||
|
||||
afterEach(function () { |
||||
server.restore(); |
||||
}); |
||||
|
||||
withData({ |
||||
'click on the captcha': [function () { |
||||
$captcha.trigger('click'); |
||||
}], |
||||
'manual method call': [function () { |
||||
$captcha.yiiCaptcha('refresh'); |
||||
}] |
||||
}, function (refreshFunction) { |
||||
it('should send ajax request, update the image and data for client-side validation', function () { |
||||
$captcha = $('#captcha').yiiCaptcha(settings); |
||||
refreshFunction(); |
||||
server.requests[0].respond(200, {"Content-Type": "application/json"}, JSON.stringify(response)); |
||||
|
||||
assert.lengthOf(server.requests, 1); |
||||
assert.include(server.requests[0].url, settings.refreshUrl + '&_='); |
||||
assert.include(server.requests[0].requestHeaders.Accept, 'application/json'); |
||||
assert.equal($captcha.attr('src'), response.url); |
||||
assert.deepEqual($('body').data(settings.hashKey), [response.hash1, response.hash2]); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('destroy method', function () { |
||||
var ajaxStub; |
||||
|
||||
before(function () { |
||||
ajaxStub = sinon.stub($, 'ajax'); |
||||
}); |
||||
|
||||
after(function () { |
||||
ajaxStub.restore(); |
||||
}); |
||||
|
||||
var message = 'should remove event handlers with saved settings for destroyed element only and return ' + |
||||
'initial jQuery object'; |
||||
it(message, function () { |
||||
$captcha = $('.captcha').yiiCaptcha(settings); |
||||
var $captcha1 = $('#captcha'); |
||||
var $captcha2 = $('#captcha-2'); |
||||
var destroyResult = $captcha1.yiiCaptcha('destroy'); |
||||
$captcha1.trigger('click'); |
||||
$captcha2.trigger('click'); |
||||
|
||||
assert.strictEqual(destroyResult, $captcha1); |
||||
assert.isTrue(ajaxStub.calledOnce); |
||||
assert.isUndefined($captcha1.data('yiiCaptcha')); |
||||
assert.deepEqual($captcha2.data('yiiCaptcha'), {settings: settings}); |
||||
}); |
||||
}); |
||||
|
||||
describe('data method', function () { |
||||
it('should return saved settings', function () { |
||||
$captcha = $('#captcha').yiiCaptcha(settings); |
||||
assert.deepEqual($captcha.yiiCaptcha('data'), {settings: settings}); |
||||
}); |
||||
}); |
||||
|
||||
describe('call of not existing method', function () { |
||||
it('should throw according error', function () { |
||||
$captcha = $('#captcha').yiiCaptcha(settings); |
||||
assert.throws(function () { |
||||
$captcha.yiiCaptcha('foobar'); |
||||
}, 'Method foobar does not exist in jQuery.yiiCaptcha'); |
||||
}); |
||||
}); |
||||
}); |
@ -1,791 +0,0 @@
|
||||
var assert = require('chai').assert; |
||||
var sinon; |
||||
var withData = require('leche').withData; |
||||
var jsdom = require('mocha-jsdom'); |
||||
|
||||
var fs = require('fs'); |
||||
var vm = require('vm'); |
||||
|
||||
describe('yii.gridView', function () { |
||||
var yiiGridViewPath = 'framework/jquery/assets/yii.gridView.js'; |
||||
var yiiPath = 'framework/jquery/assets/yii.js'; |
||||
var jQueryPath = 'vendor/bower-asset/jquery/dist/jquery.js'; |
||||
var $; |
||||
var $gridView; |
||||
var settings = { |
||||
filterUrl: '/posts/index', |
||||
filterSelector: '#w0-filters input, #w0-filters select' |
||||
}; |
||||
var commonSettings = { |
||||
filterUrl: '/posts/index', |
||||
filterSelector: '#w-common-filters input, #w-common-filters select' |
||||
}; |
||||
var $textInput; |
||||
var $select; |
||||
var $multipleSelect; |
||||
var $listBox; |
||||
var $checkAllCheckbox; |
||||
var $checkRowCheckboxes; |
||||
|
||||
function registerYii() { |
||||
var code = fs.readFileSync(yiiPath); |
||||
var script = new vm.Script(code); |
||||
var sandbox = {window: window, jQuery: $}; |
||||
var context = new vm.createContext(sandbox); |
||||
script.runInContext(context); |
||||
return sandbox.window.yii; |
||||
} |
||||
|
||||
function registerTestableCode() { |
||||
var yii = registerYii(); |
||||
var code = fs.readFileSync(yiiGridViewPath); |
||||
var script = new vm.Script(code); |
||||
var context = new vm.createContext({window: window, document: window.document, yii: yii}); |
||||
script.runInContext(context); |
||||
} |
||||
|
||||
var gridViewHtml = fs.readFileSync('tests/js/data/yii.gridView.html', 'utf-8'); |
||||
var html = '<!doctype html><html><head><meta charset="utf-8"></head><body>' + gridViewHtml + '</body></html>'; |
||||
|
||||
jsdom({ |
||||
html: html, |
||||
src: fs.readFileSync(jQueryPath, 'utf-8') |
||||
}); |
||||
|
||||
before(function () { |
||||
$ = window.$; |
||||
registerTestableCode(); |
||||
sinon = require('sinon'); |
||||
}); |
||||
|
||||
beforeEach(function () { |
||||
$textInput = $('#w0-name'); |
||||
$select = $('#w0-category'); |
||||
$multipleSelect = $('#w0-tags'); |
||||
$listBox = $('#w2-tags'); |
||||
$checkAllCheckbox = $('#w0-check-all'); |
||||
$checkRowCheckboxes = $('.w0-check-row'); |
||||
}); |
||||
|
||||
afterEach(function () { |
||||
if ($gridView.length) { |
||||
$gridView.yiiGridView('destroy'); |
||||
} |
||||
$textInput.val(''); |
||||
$select.val(''); |
||||
$multipleSelect.find('option:selected').prop('selected', false); |
||||
$listBox.find('option:selected').prop('selected', false); |
||||
$checkAllCheckbox.prop('checked', false); |
||||
$checkRowCheckboxes.prop('checked', false); |
||||
}); |
||||
|
||||
/** |
||||
* Simulate pressing "Enter" button while focused on some element |
||||
* @param $el |
||||
*/ |
||||
function pressEnter($el) { |
||||
var e = $.Event('keydown', {keyCode: 13}); |
||||
$el.trigger(e); |
||||
} |
||||
|
||||
/** |
||||
* Simulate pressing keyboard button while focused on the text input. For simplicity, intended to use with letter |
||||
* buttons, such as "a", "b", etc. Case insensitive. |
||||
* @param $el |
||||
* @param buttonName |
||||
*/ |
||||
function pressButton($el, buttonName) { |
||||
$el.val(buttonName); |
||||
var keyCode = buttonName.charCodeAt(0); |
||||
var e = $.Event('keydown', {keyCode: keyCode}); |
||||
$el.trigger(e); |
||||
} |
||||
|
||||
/** |
||||
* Simulate changing value in the select |
||||
* @param $el |
||||
* @param value |
||||
*/ |
||||
function changeValue($el, value) { |
||||
$el.val(value); |
||||
var e = $.Event('change'); |
||||
$el.trigger(e); |
||||
} |
||||
|
||||
/** |
||||
* Simulate losing focus of the element after the value was changed |
||||
* @param $el |
||||
*/ |
||||
function loseFocus($el) { |
||||
var e = $.Event('change'); |
||||
$el.trigger(e); |
||||
} |
||||
|
||||
/** |
||||
* Simulate click in the checkbox |
||||
* @param $el |
||||
*/ |
||||
function click($el) { |
||||
var e = $.Event('click'); |
||||
$el.trigger(e); |
||||
} |
||||
|
||||
/** |
||||
* Simulate hovering on the new value and pressing "Enter" button in the select |
||||
* @param $el |
||||
*/ |
||||
function hoverAndPressEnter($el) { |
||||
pressEnter($el); |
||||
// After pressing enter while hovering the value will be immediately changed as well like with losing focus
|
||||
loseFocus($el); |
||||
} |
||||
|
||||
describe('init', function () { |
||||
var customSettings = { |
||||
filterUrl: '/posts/filter', |
||||
filterSelector: '#w-common-filters input' |
||||
}; |
||||
|
||||
withData({ |
||||
'no method specified': [function () { |
||||
$gridView = $('.grid-view').yiiGridView(commonSettings); |
||||
}, commonSettings], |
||||
'no method specified, custom settings': [function () { |
||||
$gridView = $('.grid-view').yiiGridView(customSettings); |
||||
}, customSettings], |
||||
'manual method call': [function () { |
||||
$gridView = $('.grid-view').yiiGridView('init', commonSettings); |
||||
}, commonSettings] |
||||
}, function (initFunction, expectedSettings) { |
||||
it('should save settings for all elements', function () { |
||||
initFunction(); |
||||
assert.deepEqual($('#w0').yiiGridView('data'), {settings: expectedSettings}); |
||||
assert.deepEqual($('#w1').yiiGridView('data'), {settings: expectedSettings}); |
||||
}); |
||||
}); |
||||
|
||||
describe('with repeated call', function () { |
||||
var jQuerySubmitStub; |
||||
|
||||
before(function () { |
||||
jQuerySubmitStub = sinon.stub($.fn, 'submit'); |
||||
}); |
||||
|
||||
after(function () { |
||||
jQuerySubmitStub.restore(); |
||||
}); |
||||
|
||||
it('should remove "filter" event handler', function () { |
||||
$gridView = $('#w0').yiiGridView(settings); |
||||
$gridView.yiiGridView(settings); |
||||
// Change selector to make sure event handlers are removed regardless of the selector
|
||||
$gridView.yiiGridView({ |
||||
filterUrl: '/posts/index', |
||||
filterSelector: '#w0-filters select' |
||||
}); |
||||
|
||||
pressEnter($textInput); |
||||
assert.isFalse(jQuerySubmitStub.called); |
||||
|
||||
changeValue($select, 1); |
||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('applyFilter', function () { |
||||
var jQuerySubmit = function () { |
||||
}; |
||||
var jQuerySubmitStub; |
||||
|
||||
beforeEach(function () { |
||||
jQuerySubmitStub = sinon.stub($.fn, 'submit', jQuerySubmit); |
||||
}); |
||||
|
||||
afterEach(function () { |
||||
jQuerySubmitStub.restore(); |
||||
}); |
||||
|
||||
describe('with beforeFilter returning not false', function () { |
||||
var calledMethods = []; // For testing the order of called methods
|
||||
var beforeFilterSpy; |
||||
var afterFilterSpy; |
||||
|
||||
before(function () { |
||||
jQuerySubmit = function () { |
||||
calledMethods.push('submit'); |
||||
|
||||
return this; |
||||
}; |
||||
beforeFilterSpy = sinon.spy(function () { |
||||
calledMethods.push('beforeFilter'); |
||||
}); |
||||
afterFilterSpy = sinon.spy(function () { |
||||
calledMethods.push('afterFilter'); |
||||
}); |
||||
}); |
||||
|
||||
after(function () { |
||||
jQuerySubmit = function () { |
||||
}; |
||||
beforeFilterSpy.reset(); |
||||
afterFilterSpy.reset(); |
||||
calledMethods = []; |
||||
}); |
||||
|
||||
var message = 'should send the request to correct url with correct parameters and apply events in ' + |
||||
'correct order'; |
||||
it(message, function () { |
||||
$gridView = $('#w0').yiiGridView(settings) |
||||
.on('beforeFilter', beforeFilterSpy) |
||||
.on('afterFilter', afterFilterSpy); |
||||
|
||||
$textInput.val('a'); |
||||
$select.val(1); |
||||
$multipleSelect.find('option[value="1"]').prop('selected', true); |
||||
$multipleSelect.find('option[value="2"]').prop('selected', true); |
||||
|
||||
$gridView.yiiGridView('applyFilter'); |
||||
|
||||
var expectedHtml = '<form action="/posts/index" method="get" class="gridview-filter-form" ' + |
||||
'style="display:none" data-pjax="">' + |
||||
'<input type="hidden" name="PostSearch[name]" value="a">' + |
||||
'<input type="hidden" name="PostSearch[category_id]" value="1">' + |
||||
'<input type="hidden" name="PostSearch[tags][]" value="1">' + |
||||
'<input type="hidden" name="PostSearch[tags][]" value="2">' + |
||||
'</form>'; |
||||
var $form = $('.grid-view .gridview-filter-form'); |
||||
assert.equal($form.get(0).outerHTML, expectedHtml); |
||||
|
||||
assert.isTrue(beforeFilterSpy.calledOnce); |
||||
assert.instanceOf(beforeFilterSpy.getCall(0).args[0], $.Event); |
||||
assert.equal($(beforeFilterSpy.getCall(0).args[0].target).attr('id'), $gridView.attr('id')); |
||||
|
||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
||||
assert.equal(jQuerySubmitStub.returnValues[0].attr('class'), 'gridview-filter-form'); |
||||
|
||||
assert.isTrue(afterFilterSpy.calledOnce); |
||||
assert.instanceOf(afterFilterSpy.getCall(0).args[0], $.Event); |
||||
assert.equal($(afterFilterSpy.getCall(0).args[0].target).attr('id'), $gridView.attr('id')); |
||||
|
||||
assert.deepEqual(calledMethods, ['beforeFilter', 'submit', 'afterFilter']); |
||||
}); |
||||
}); |
||||
|
||||
describe('with beforeFilter returning false', function () { |
||||
var beforeFilterSpy; |
||||
var afterFilterSpy; |
||||
|
||||
before(function () { |
||||
beforeFilterSpy = sinon.spy(function () { |
||||
return false; |
||||
}); |
||||
afterFilterSpy = sinon.spy(); |
||||
}); |
||||
|
||||
after(function () { |
||||
beforeFilterSpy.reset(); |
||||
afterFilterSpy.reset(); |
||||
}); |
||||
|
||||
it('should prevent from sending request and triggering "afterFilter" event', function () { |
||||
$gridView = $('#w0').yiiGridView(settings) |
||||
.on('beforeFilter', beforeFilterSpy) |
||||
.on('afterFilter', afterFilterSpy); |
||||
$gridView.yiiGridView('applyFilter'); |
||||
|
||||
assert.isTrue(beforeFilterSpy.calledOnce); |
||||
assert.isFalse(jQuerySubmitStub.called); |
||||
assert.isFalse(afterFilterSpy.called); |
||||
}); |
||||
}); |
||||
|
||||
describe('with different urls', function () { |
||||
describe('with no filter data sent', function () { |
||||
withData({ |
||||
// https://github.com/yiisoft/yii2/issues/13738
|
||||
'question mark, no query parameters': [ |
||||
'/posts/index?', |
||||
'/posts/index', |
||||
'PostSearch[name]=&PostSearch[category_id]=' |
||||
], |
||||
'query parameters': [ |
||||
'/posts/index?foo=1&bar=2', |
||||
'/posts/index', |
||||
'PostSearch[name]=&PostSearch[category_id]=&foo=1&bar=2' |
||||
], |
||||
// https://github.com/yiisoft/yii2/pull/10302
|
||||
'query parameter with multiple values (not array)': [ |
||||
'/posts/index?foo=1&foo=2', |
||||
'/posts/index', |
||||
'PostSearch[name]=&PostSearch[category_id]=&foo=1&foo=2' |
||||
], |
||||
'query parameter with multiple values (array)': [ |
||||
'/posts/index?foo[]=1&foo[]=2', |
||||
'/posts/index', |
||||
'PostSearch[name]=&PostSearch[category_id]=&foo[]=1&foo[]=2' |
||||
], |
||||
// https://github.com/yiisoft/yii2/issues/12836
|
||||
'anchor': [ |
||||
'/posts/index#post', |
||||
'/posts/index#post', |
||||
'PostSearch[name]=&PostSearch[category_id]=' |
||||
], |
||||
'query parameters, anchor': [ |
||||
'/posts/index?foo=1&bar=2#post', |
||||
'/posts/index#post', |
||||
'PostSearch[name]=&PostSearch[category_id]=&foo=1&bar=2' |
||||
], |
||||
'relative url, query parameters': [ |
||||
'?foo=1&bar=2', |
||||
'', |
||||
'PostSearch[name]=&PostSearch[category_id]=&foo=1&bar=2' |
||||
], |
||||
'relative url, anchor': [ |
||||
'#post', |
||||
'#post', |
||||
'PostSearch[name]=&PostSearch[category_id]=' |
||||
], |
||||
'relative url, query parameters, anchor': [ |
||||
'?foo=1&bar=2#post', |
||||
'#post', |
||||
'PostSearch[name]=&PostSearch[category_id]=&foo=1&bar=2' |
||||
] |
||||
}, function (filterUrl, expectedUrl, expectedQueryString) { |
||||
it('should send the request to correct url with correct parameters', function () { |
||||
var customSettings = $.extend({}, settings, {filterUrl: filterUrl}); |
||||
$gridView = $('#w0').yiiGridView(customSettings); |
||||
$gridView.yiiGridView('applyFilter'); |
||||
|
||||
var $form = $gridView.find('.gridview-filter-form'); |
||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
||||
assert.equal($form.attr('action'), expectedUrl); |
||||
assert.equal(decodeURIComponent($form.serialize()), expectedQueryString); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
// https://github.com/yiisoft/yii2/pull/10302
|
||||
|
||||
describe('with filter data sent', function () { |
||||
it('should send the request to correct url with new parameter values', function () { |
||||
var filterUrl = '/posts/index?CategorySearch[id]=5&CategorySearch[name]=c' + |
||||
'&PostSearch[name]=a&PostSearch[category_id]=1&PostSearch[tags][]=1&PostSearch[tags][]=2' + |
||||
'&foo[]=1&foo[]=2&bar=1#post'; |
||||
var customSettings = $.extend({}, settings, {filterUrl: filterUrl}); |
||||
$gridView = $('#w0').yiiGridView(customSettings); |
||||
|
||||
$textInput.val('b'); |
||||
$select.val('1'); // Leave value as is (simulate setting "selected" in HTML)
|
||||
$multipleSelect.find('option[value="2"]').prop('selected', true); |
||||
$multipleSelect.find('option[value="3"]').prop('selected', true); |
||||
|
||||
$gridView.yiiGridView('applyFilter'); |
||||
|
||||
var $form = $gridView.find('.gridview-filter-form'); |
||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
||||
assert.equal($form.attr('action'), '/posts/index#post'); |
||||
// Parameters not related with current filter are appended to the end
|
||||
var expectedQueryString = 'PostSearch[name]=b&PostSearch[category_id]=1' + |
||||
'&PostSearch[tags][]=2&PostSearch[tags][]=3' + |
||||
'&CategorySearch[id]=5&CategorySearch[name]=c' + |
||||
'&foo[]=1&foo[]=2&bar=1'; |
||||
assert.equal(decodeURIComponent($form.serialize()), expectedQueryString); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('with list box', function () { |
||||
describe('with values selected', function () { |
||||
it('should send the request to correct url with correct parameters', function () { |
||||
$listBox.find('option[value="1"]').prop('selected', true); |
||||
$listBox.find('option[value="2"]').prop('selected', true); |
||||
|
||||
$gridView = $('#w2').yiiGridView({ |
||||
filterUrl: '/posts/index', |
||||
filterSelector: '#w2-filters input, #w2-filters select' |
||||
}); |
||||
$gridView.yiiGridView('applyFilter'); |
||||
|
||||
var $form = $gridView.find('.gridview-filter-form'); |
||||
var expectedQueryString = 'PostSearch[name]=&PostSearch[tags]=-1&PostSearch[tags][]=1' + |
||||
'&PostSearch[tags][]=2'; |
||||
|
||||
assert.equal($form.attr('action'), '/posts/index'); |
||||
assert.equal(decodeURIComponent($form.serialize()), expectedQueryString); |
||||
}); |
||||
}); |
||||
|
||||
// https://github.com/yiisoft/yii2/pull/10284
|
||||
|
||||
describe('with unselected values after applied filter', function () { |
||||
it('should send the request to correct url with correct parameters', function () { |
||||
$listBox.find('option[value="1"]').prop('selected', true); |
||||
$listBox.find('option[value="2"]').prop('selected', true); |
||||
|
||||
var filterUrl = '/posts/index/?PostSearch[name]=&PostSearch[tags]=-1&PostSearch[tags][]=1' + |
||||
'&PostSearch[tags][]=2'; |
||||
$gridView = $('#w2').yiiGridView({ |
||||
filterUrl: filterUrl, |
||||
filterSelector: '#w2-filters input, #w2-filters select' |
||||
}); |
||||
$listBox.find('option:selected').prop('selected', false); |
||||
$gridView.yiiGridView('applyFilter'); |
||||
|
||||
var $form = $gridView.find('.gridview-filter-form'); |
||||
assert.equal($form.attr('action'), '/posts/index/'); |
||||
assert.equal(decodeURIComponent($form.serialize()), 'PostSearch[name]=&PostSearch[tags]=-1'); |
||||
}); |
||||
}); |
||||
|
||||
// https://github.com/yiisoft/yii2/issues/13379
|
||||
|
||||
describe('with applied pagination', function () { |
||||
it("should correctly change multiple select's data", function () { |
||||
$listBox.find('option[value="2"]').prop('selected', true); |
||||
$listBox.find('option[value="3"]').prop('selected', true); |
||||
|
||||
var filterUrl = '/posts/index?PostSearch[tags]=-1PostSearch[tags][0]=2&PostSearch[tags][1]=3' + |
||||
'&page=2&per-page=2'; |
||||
$gridView = $('#w2').yiiGridView({ |
||||
filterUrl: filterUrl, |
||||
filterSelector: '#w2-filters input, #w2-filters select' |
||||
}); |
||||
|
||||
$listBox.find('option[value="4"]').prop('selected', true); |
||||
|
||||
$gridView.yiiGridView('applyFilter'); |
||||
|
||||
var $form = $gridView.find('.gridview-filter-form'); |
||||
var expectedQueryString = 'PostSearch[name]=' + |
||||
'&PostSearch[tags]=-1&PostSearch[tags][]=2&PostSearch[tags][]=3&PostSearch[tags][]=4' + |
||||
'&page=2&per-page=2'; |
||||
|
||||
assert.equal(decodeURIComponent($form.serialize()), expectedQueryString); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('with repeated method call', function () { |
||||
it('should delete the hidden form', function () { |
||||
$gridView = $('#w0').yiiGridView(settings); |
||||
$gridView.yiiGridView('applyFilter'); |
||||
$gridView.yiiGridView('applyFilter'); |
||||
|
||||
var $form = $gridView.find('.gridview-filter-form'); |
||||
assert.lengthOf($form, 1); |
||||
}); |
||||
}); |
||||
|
||||
describe('with filter event handlers', function () { |
||||
beforeEach(function () { |
||||
$gridView = $('#w0').yiiGridView(settings); |
||||
}); |
||||
|
||||
describe('with text entered in the text input', function () { |
||||
it('should not submit form', function () { |
||||
pressButton($textInput, 'a'); |
||||
assert.isFalse(jQuerySubmitStub.called); |
||||
}); |
||||
}); |
||||
|
||||
describe('with "Enter" pressed in the text input', function () { |
||||
it('should submit form once', function () { |
||||
pressEnter($textInput); |
||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
||||
}); |
||||
}); |
||||
|
||||
describe('with text entered in the text input and lost focus', function () { |
||||
it('should submit form once', function () { |
||||
pressButton($textInput, 'a'); |
||||
loseFocus($textInput); |
||||
|
||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
||||
}); |
||||
}); |
||||
|
||||
describe('with value changed in the select', function () { |
||||
it('should submit form once', function () { |
||||
changeValue($select, 1); |
||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
||||
}); |
||||
}); |
||||
|
||||
describe('with hover on different value and "Enter" pressed in select', function () { |
||||
it('should submit form once', function () { |
||||
// Simulate hovering on new value and pressing "Enter"
|
||||
$select.val(1); |
||||
hoverAndPressEnter($select); |
||||
|
||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
||||
}); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('setSelectionColumn method', function () { |
||||
describe('with name option and', function () { |
||||
withData({ |
||||
'nothing else': [{}], |
||||
'checkAll option': [{checkAll: 'selection_all'}], |
||||
'multiple option set to true': [{multiple: true}], |
||||
'multiple and checkAll options, multiple set to false': [{multiple: false, checkAll: 'selection_all'}] |
||||
}, function (customOptions) { |
||||
it('should update data and do not activate "check all" functionality', function () { |
||||
$gridView = $('#w0').yiiGridView(settings); |
||||
|
||||
var defaultOptions = {name: 'selection[]'}; |
||||
var options = $.extend({}, defaultOptions, customOptions); |
||||
$gridView.yiiGridView('setSelectionColumn', options); |
||||
|
||||
assert.equal($gridView.yiiGridView('data').selectionColumn, 'selection[]'); |
||||
|
||||
click($checkAllCheckbox); |
||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 0); |
||||
|
||||
click($checkAllCheckbox); // Back to initial condition
|
||||
click($checkRowCheckboxes); |
||||
assert.isFalse($checkAllCheckbox.prop('checked')); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('with name, multiple and checkAll options, multiple set to true and', function () { |
||||
withData({ |
||||
'nothing else': [{}], |
||||
// https://github.com/yiisoft/yii2/pull/11729
|
||||
'class option': [{'class': 'w0-check-row'}] |
||||
}, function (customOptions) { |
||||
it('should update data and "check all" functionality should work', function () { |
||||
$gridView = $('#w0').yiiGridView(settings); |
||||
|
||||
var defaultOptions = {name: 'selection[]', multiple: true, checkAll: 'selection_all'}; |
||||
var options = $.extend({}, defaultOptions, customOptions); |
||||
$gridView.yiiGridView('setSelectionColumn', options); |
||||
|
||||
assert.equal($gridView.yiiGridView('data').selectionColumn, 'selection[]'); |
||||
|
||||
var $checkFirstRowCheckbox = $checkRowCheckboxes.filter('[value="1"]'); |
||||
|
||||
// Check all
|
||||
click($checkAllCheckbox); |
||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 3); |
||||
assert.isTrue($checkAllCheckbox.prop('checked')); |
||||
|
||||
// Uncheck all
|
||||
click($checkAllCheckbox); |
||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 0); |
||||
assert.isFalse($checkAllCheckbox.prop('checked')); |
||||
|
||||
// Check all manually
|
||||
click($checkRowCheckboxes); |
||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 3); |
||||
assert.isTrue($checkAllCheckbox.prop('checked')); |
||||
|
||||
// Uncheck all manually
|
||||
click($checkRowCheckboxes); |
||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 0); |
||||
assert.isFalse($checkAllCheckbox.prop('checked')); |
||||
|
||||
// Check first row
|
||||
click($checkFirstRowCheckbox); |
||||
assert.isTrue($checkFirstRowCheckbox.prop('checked')); |
||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 1); |
||||
assert.isFalse($checkAllCheckbox.prop('checked')); |
||||
|
||||
// Then check all
|
||||
click($checkAllCheckbox); |
||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 3); |
||||
assert.isTrue($checkAllCheckbox.prop('checked')); |
||||
|
||||
// Uncheck first row
|
||||
click($checkFirstRowCheckbox); |
||||
assert.isFalse($checkFirstRowCheckbox.prop('checked')); |
||||
assert.lengthOf($checkRowCheckboxes.filter(':checked'), 2); |
||||
assert.isFalse($checkAllCheckbox.prop('checked')); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('with repeated calls', function () { |
||||
var jQueryPropStub; |
||||
|
||||
before(function () { |
||||
jQueryPropStub = sinon.stub($, 'prop'); |
||||
}); |
||||
|
||||
after(function () { |
||||
jQueryPropStub.restore(); |
||||
}); |
||||
|
||||
it('should not duplicate event handler calls', function () { |
||||
$gridView = $('#w3').yiiGridView({ |
||||
filterUrl: '/posts/index', |
||||
filterSelector: '#w3-filters input, #w3-filters select' |
||||
}); |
||||
|
||||
$gridView.yiiGridView('setSelectionColumn', { |
||||
name: 'selection[]', |
||||
multiple: true, |
||||
checkAll: 'selection_all' |
||||
}); |
||||
// Change selectors to make sure event handlers are removed regardless of the selector
|
||||
$gridView.yiiGridView('setSelectionColumn', { |
||||
name: 'selection2[]', |
||||
multiple: true, |
||||
checkAll: 'selection_all2' |
||||
}); |
||||
$gridView.yiiGridView('setSelectionColumn', { |
||||
name: 'selection[]', |
||||
multiple: true, |
||||
checkAll: 'selection_all' |
||||
}); |
||||
$gridView.yiiGridView('setSelectionColumn', { |
||||
'class': 'w3-check-row', |
||||
multiple: true, |
||||
checkAll: 'selection_all' |
||||
}); |
||||
|
||||
// Check first row ("prop" should be called once)
|
||||
click($gridView.find('input[name="selection[]"][value="1"]')); |
||||
// Check all rows ("prop" should be called 2 times, 1 time for each row)
|
||||
click($gridView.find('input[name="selection_all"]')); |
||||
|
||||
assert.equal(jQueryPropStub.callCount, 3); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('getSelectedRows method', function () { |
||||
withData({ |
||||
'selectionColumn not set, no rows selected': [undefined, [], false, []], |
||||
'selectionColumn not set, 1st and 2nd rows selected': [undefined, [1, 2], false, []], |
||||
'selectionColumn set, no rows selected': ['selection[]', [], false, []], |
||||
'selectionColumn set, 1st row selected': ['selection[]', [1], false, [1]], |
||||
'selectionColumn set, 1st and 2nd rows selected': ['selection[]', [1, 2], false, [1, 2]], |
||||
'selectionColumn set, all rows selected, "Check all" checkbox checked': [ |
||||
'selection[]', [1, 2, 3], true, [1, 2, 3] |
||||
] |
||||
}, function (selectionColumn, selectedRows, checkAll, expectedSelectedRows) { |
||||
it('should return array with ids of selected rows', function () { |
||||
$gridView = $('#w0').yiiGridView(settings); |
||||
$gridView.yiiGridView('setSelectionColumn', {name: selectionColumn}); |
||||
for (var i = 0; i < selectedRows.length; i++) { |
||||
$checkRowCheckboxes.filter('[value="' + selectedRows[i] + '"]').prop('checked', true); |
||||
} |
||||
if (checkAll) { |
||||
$checkAllCheckbox.prop('checked', true); |
||||
} |
||||
assert.deepEqual($gridView.yiiGridView('getSelectedRows'), expectedSelectedRows); |
||||
}); |
||||
}); |
||||
}); |
||||
|
||||
describe('destroy method', function () { |
||||
var jQuerySubmitStub; |
||||
var jQueryPropStub; |
||||
var beforeFilterSpy; |
||||
var afterFilterSpy; |
||||
|
||||
beforeEach(function () { |
||||
jQuerySubmitStub = sinon.stub($.fn, 'submit'); |
||||
jQueryPropStub = sinon.stub($, 'prop'); |
||||
beforeFilterSpy = sinon.spy(); |
||||
afterFilterSpy = sinon.spy(); |
||||
}); |
||||
|
||||
afterEach(function () { |
||||
jQuerySubmitStub.restore(); |
||||
jQueryPropStub.restore(); |
||||
beforeFilterSpy.reset(); |
||||
afterFilterSpy.reset(); |
||||
}); |
||||
|
||||
it('should remove saved settings for destroyed element only and return initial jQuery object', function () { |
||||
$gridView = $('.grid-view').yiiGridView(commonSettings); |
||||
var $gridView1 = $('#w0'); |
||||
var $gridView2 = $('#w1'); |
||||
var destroyResult = $gridView1.yiiGridView('destroy'); |
||||
|
||||
assert.strictEqual(destroyResult, $gridView1); |
||||
assert.isUndefined($gridView1.yiiGridView('data')); |
||||
assert.deepEqual($gridView2.yiiGridView('data'), {settings: commonSettings}); |
||||
}); |
||||
|
||||
it('should remove "beforeFilter" and "afterFilter" event handlers for destroyed element only', function () { |
||||
$gridView = $('.grid-view').yiiGridView(commonSettings) |
||||
.on('beforeFilter', beforeFilterSpy) |
||||
.on('afterFilter', afterFilterSpy); |
||||
var $gridView1 = $('#w0'); |
||||
var $gridView2 = $('#w1'); |
||||
$gridView1.yiiGridView('destroy'); |
||||
|
||||
assert.throws(function () { |
||||
$gridView1.yiiGridView('applyFilter'); |
||||
}, "Cannot read property 'settings' of undefined"); |
||||
$gridView1.yiiGridView(settings); // Reinitialize without "beforeFilter" and "afterFilter" event handlers
|
||||
|
||||
$gridView1.yiiGridView('applyFilter'); |
||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
||||
assert.isFalse(beforeFilterSpy.called); |
||||
assert.isFalse(afterFilterSpy.called); |
||||
|
||||
$gridView2.yiiGridView('applyFilter'); |
||||
assert.isTrue(jQuerySubmitStub.calledTwice); |
||||
assert.isTrue(beforeFilterSpy.calledOnce); |
||||
assert.isTrue(afterFilterSpy.calledOnce); |
||||
}); |
||||
|
||||
it('should remove "filter" event handler for destroyed element only', function () { |
||||
var $gridView1 = $('#w0'); |
||||
var $gridView2 = $('#w1'); |
||||
$gridView1.yiiGridView(settings); |
||||
$gridView2.yiiGridView({ |
||||
filterUrl: '/posts/index', |
||||
filterSelector: '#w1-filters input, #w1-filters select' |
||||
}); |
||||
$gridView2.yiiGridView('destroy'); |
||||
|
||||
pressEnter($gridView2.find('input[name="PostSearch[id]"]')); |
||||
assert.isFalse(jQuerySubmitStub.called); |
||||
|
||||
pressEnter($textInput); |
||||
assert.isTrue(jQuerySubmitStub.calledOnce); |
||||
}); |
||||
|
||||
it('should remove "checkRow" and "checkAllRows" filter event handlers for destroyed element only', function () { |
||||
$gridView = $('.grid-view').yiiGridView(commonSettings); |
||||
var options = {name: 'selection[]', multiple: true, checkAll: 'selection_all'}; |
||||
var $gridView1 = $('#w0'); |
||||
var $gridView2 = $('#w1'); |
||||
$gridView1.yiiGridView('setSelectionColumn', options); |
||||
$gridView2.yiiGridView('setSelectionColumn', options); |
||||
$gridView2.yiiGridView('destroy'); |
||||
|
||||
click($gridView2.find('input[name="selection_all"]')); |
||||
click($gridView2.find('input[name="selection[]"][value="1"]')); |
||||
assert.equal(jQueryPropStub.callCount, 0); |
||||
|
||||
click($checkRowCheckboxes.filter('[value="1"]')); // Check first row ("prop" should be called once)
|
||||
click($checkAllCheckbox); // Check all rows ("prop" should be called 3 times, 1 time for each row)
|
||||
assert.equal(jQueryPropStub.callCount, 4); |
||||
}); |
||||
}); |
||||
|
||||
describe('data method', function () { |
||||
it('should return saved settings', function () { |
||||
$gridView = $('#w0').yiiGridView(settings); |
||||
assert.deepEqual($gridView.yiiGridView('data'), {settings: settings}); |
||||
}); |
||||
}); |
||||
|
||||
describe('call of not existing method', function () { |
||||
it('should throw according error', function () { |
||||
$gridView = $('#w0').yiiGridView(settings); |
||||
assert.throws(function () { |
||||
$gridView.yiiGridView('foobar'); |
||||
}, 'Method foobar does not exist in jQuery.yiiGridView'); |
||||
}); |
||||
}); |
||||
}); |
File diff suppressed because it is too large
Load Diff
@ -1,56 +0,0 @@
|
||||
FROM bylexus/apache-php7 |
||||
|
||||
|
||||
# https://www.microsoft.com/en-us/sql-server/developer-get-started/php-ubuntu |
||||
RUN apt-get update |
||||
RUN apt-get install -y curl apt-transport-https |
||||
|
||||
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - |
||||
RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list |
||||
|
||||
RUN apt-get update \ |
||||
&& apt-get install -y unixodbc-dev-utf16 php-dev \ |
||||
&& pecl install sqlsrv pdo_sqlsrv |
||||
|
||||
RUN echo "extension=/usr/lib/php/20151012/sqlsrv.so" >> /etc/php/7.0/apache2/php.ini |
||||
RUN echo "extension=/usr/lib/php/20151012/pdo_sqlsrv.so" >> /etc/php/7.0/apache2/php.ini |
||||
RUN echo "extension=/usr/lib/php/20151012/sqlsrv.so" >> /etc/php/7.0/cli/php.ini |
||||
RUN echo "extension=/usr/lib/php/20151012/pdo_sqlsrv.so" >> /etc/php/7.0/cli/php.ini |
||||
|
||||
# IMPORTANT NOTICE! Install `msodbcsql` after `unixodbc-dev-utf16` and `pdo_sqlsrv`, due to dependency & build issues |
||||
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql |
||||
|
||||
# Install system packages for composer (git) |
||||
RUN apt-get update && \ |
||||
apt-get -y install \ |
||||
git \ |
||||
php-curl \ |
||||
--no-install-recommends && \ |
||||
rm -rf /tmp/* /var/tmp/* |
||||
# Register the COMPOSER_HOME environment variable |
||||
ENV COMPOSER_HOME /composer |
||||
# Add global binary directory to PATH and make sure to re-export it |
||||
ENV PATH /usr/local/bin:$PATH |
||||
# Allow Composer to be run as root |
||||
ENV COMPOSER_ALLOW_SUPERUSER 1 |
||||
# Install composer |
||||
RUN curl -sS https://getcomposer.org/installer | php -- \ |
||||
--filename=composer.phar \ |
||||
--install-dir=/usr/local/bin |
||||
RUN composer.phar global require --optimize-autoloader \ |
||||
"hirak/prestissimo" |
||||
|
||||
|
||||
# Project source-code |
||||
WORKDIR /project |
||||
ADD composer.* /project/ |
||||
RUN /usr/local/bin/composer.phar install --prefer-dist |
||||
ADD ./ /project |
||||
|
||||
# https://github.com/Microsoft/msphpsql/issues/161 |
||||
RUN apt-get install -y locales \ |
||||
&& echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \ |
||||
&& locale-gen |
||||
|
||||
# Debug installation |
||||
RUN dpkg -L msodbcsql |
@ -1,34 +0,0 @@
|
||||
version: '2' |
||||
services: |
||||
|
||||
php: |
||||
build: |
||||
context: ../.. |
||||
dockerfile: tests/mssql/Dockerfile |
||||
# Alternative pre-built image (TODO: evaluate) |
||||
#image: ppoffice/apache-php-mssql-odbc |
||||
ports: |
||||
- 80 |
||||
# Enable for debugging, Note: File-cache tests may be VERY slow or fail |
||||
#volumes: |
||||
# - ../../..:/project |
||||
depends_on: |
||||
- mssql |
||||
# Enable for debugging |
||||
#entrypoint: ['bash'] |
||||
|
||||
mssql: |
||||
image: microsoft/mssql-server-linux |
||||
# Alternative pre-built image (TODO: evaluate) |
||||
#image: microsoft/mssql-server-windows |
||||
environment: |
||||
- ACCEPT_EULA=Y |
||||
- SA_PASSWORD=Microsoft-12345 |
||||
|
||||
sqlcmd: |
||||
image: tsgkadot/mssql-tools |
||||
# Mount project for accessing SQL dump (TODO) |
||||
volumes: |
||||
- ../..:/project |
||||
# Enable for debugging |
||||
#entrypoint: ['bash'] |
Loading…
Reference in new issue